我在Angular JS中有一个控制器。
在这个控制器中我有一个$ scope.users属性:它是一组用户。
此控制器由两个视图使用:/ users和/ users /:id。
我已经看到每次进入用户视图时$ scope.users模型都是init。
我的问题很简单,如何将$ scope.users仅应用于/ users视图而不是/ users /:id视图?
我使用$ location.path方法完成了这项工作,但我不知道它是否正确。
PS:我有一个工厂来检索用户,所以我知道这是一个单身人士......
谢谢你的答案。
答案 0 :(得分:1)
您可以注入$ element对象,并搜索dom以确保您位于正确的页面上。
您可以注入$ location对象并查看该网址是否在右侧页面上。
您可以为/ user的模板添加一些内容,以便它是init的数组,然后user /:id将不包含同一个调用。
在您的代码中,您可以执行以下操作:
angular.module('myapp').constant('users',[]);
angular.module('myapp').controller('UserCtrl', function(users){
if(!users.length){
//push some things into the bloody array
}
});
我并不是说这是所有方式中最好的。这是最难解释的。它类似于创建一个全局变量,但是你没有创建一个全局变量。您正在角度模块上创建一个常量变量。
我相信还有更多方法。这些只是我想到的几种方式。
答案 1 :(得分:0)
我有答案!
事实上,AngularJS不是MVC框架,而是MVVM框架。在这种情况下,控制器是模型(在MVVM模式中),$ scope是ViewModel,HTML是视图(ng-controller是纯.NET MVVM中的dataContext)。
在这种情况下,控制器应该只有一个视图!!
“一般情况下,控制器不应该尝试做太多。它应该只包含单个视图所需的业务逻辑。”
http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller
谢谢你们。希望它有所帮助。