2016-04-16 20 views
0

Ich baue eine einseitige Anwendung mit angularjs 1 mit ngRoute und ich bin auf ein Problem gestoßen.Angular Controller initialisiert jedes Mal, wenn sein Attribut sich ändert

Ich habe eine Ansicht (/ posts) mit einem Controller (PostsController), der ein Attribut namens "Beiträge" hat, die ein Array ist, das alle Beiträge enthält. Hier ist ein Code:

(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]; 
     } 
    } 
    } 
})(); 

Jetzt, wenn ich test() kommentieren, "Hi ..." wird einmal in der Konsole gedruckt. Wenn ich es jedoch auskommentiere, wird "Hi ..." 1 + vm.posts.length mal gedruckt (7 in diesem Beispiel).

Darüber hinaus führen nachfolgende Funktionsaufrufe auch 1 + vm.posts.length mal was problematisch ist.

Irgendwelche Ideen, was das verursacht und wie ich es beheben kann?

Bearbeiten: Jemand schlug vor, der Fehler könnte in meinen Vorlagen/Routen liegen und er hatte Recht. Ich verwende eine benutzerdefinierte Direktive in ng-repeat und wenn ich es entferne, erscheint "Hi ..." nur einmal.

Beiträge-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

Ihr Problem ist nicht in der Steuerung, es muss etwas anderes verursachen bitte teilen Sie Ihre Vorlagen und Route Erklärung –

+0

@DayanMorenoLeon Sie hatten Recht! Mein benutzerdefiniertes Tag verwendete einen Controller und erstellte so jedes Mal einen ... Danke! –

Antwort

0

Das Problem log in meiner Richtlinie Erklärung:

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

Dies wurde initialisiert einen Controller für jeden Beitrag auf meiner Seite.

Verwandte Themen