我正在使用带有ngRoute的angularjs 1构建一个单页应用程序,我遇到了一个问题。
我有一个使用控制器(PostsController)的视图(/ posts),它有一个名为'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(),则在控制台中打印一次“Hi ...”。 然而,当我取消注释时,“嗨...”打印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)
我的指令声明中存在问题:
var directive = {
controller: 'PostsController',
controllerAs: 'vm',
这是为我页面上的每个帖子初始化一个控制器。