Я создаю одностраничное приложение, используя angularjs 1 с ngRoute, и столкнулся с проблемой.
У меня есть представление (/posts), использующее контроллер (PostsController), у которого есть атрибут с именем «posts», который представляет собой массив, содержащий все сообщения. Вот код:
(function(){
angular
.module('thingy.posts.controllers')
.controller('PostsController', PostsController);
PostsController.$inject = ['$scope'];
function PostsController($scope) {
var vm = this;
vm.posts = [];
activate();
function activate() {
console.log("Hi...");
test();
// Simulates loading all posts from db
function test() {
vm.posts = [1,2,3,4,5,6];
}
}
}
})();
Теперь, если я прокомментирую test(), в консоли один раз будет напечатано "Привет...". Однако, когда я раскомментирую его, "Привет..." будет напечатано 1 + vm.posts.length раз (7 в этом примере).
Более того, последующие вызовы функций также выполняются 1 + vm.posts.length раз, что проблематично.
Любые идеи о том, что вызывает это и как я могу это исправить?
Изменить: кто-то предположил, что ошибка может заключаться в моих шаблонах/маршрутах, и он был прав. Я использую пользовательскую директиву внутри ng-repeat, и когда я удаляю ее, "Привет..." появляется только один раз.
сообщения-index.html:
<div ng-repeat='post in vm.posts'>
<post post="post"></post>
</div>
Пост.директива.js:
(function () {
'use strict';
angular
.module('thingy.posts.directives')
.directive('post', post);
function post() {
var directive = {
controller: 'PostsController',
controllerAs: 'vm',
restrict: 'E',
scope: {
post: '='
},
templateUrl: '/static/templates/posts/post.html'
};
return directive;
}
})();