Я создаю одностраничное приложение, используя angularjs 1 с ngRoute, и я столкнулся с проблемой.Угловой контроллер инициализируется каждый раз, когда изменяется его атрибут
У меня есть представление (/ сообщения) с помощью контроллера (PostsController), который имеет атрибут, называемый «сообщениями», который представляет собой массив, содержащий все сообщения. Вот код:
(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>
Post.directive.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;
}
})();
Ваша проблема не в контроллере, должно быть что-то еще, вызвав, пожалуйста, поделитесь своими шаблонами и декларацией маршрута –
@DayanMorenoLeon Вы были правы! Мой пользовательский тег использовал контроллер, создавая каждый раз каждый раз ... Спасибо! –