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;
}
})();
Ihr Problem ist nicht in der Steuerung, es muss etwas anderes verursachen bitte teilen Sie Ihre Vorlagen und Route Erklärung –
@DayanMorenoLeon Sie hatten Recht! Mein benutzerdefiniertes Tag verwendete einen Controller und erstellte so jedes Mal einen ... Danke! –