2016-04-16 3 views
0

Я создаю одностраничное приложение, используя 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; 
    } 
})(); 
+0

Ваша проблема не в контроллере, должно быть что-то еще, вызвав, пожалуйста, поделитесь своими шаблонами и декларацией маршрута –

+0

@DayanMorenoLeon Вы были правы! Мой пользовательский тег использовал контроллер, создавая каждый раз каждый раз ... Спасибо! –

ответ

0

Проблема заключалась в моей директиве декларации:

var directive = { 
     controller: 'PostsController', 
     controllerAs: 'vm', 

Это инициализации контроллера для каждого сообщения на моей странице.

Смежные вопросы