0

我在 Angular JS 中有一个控制器。

在这个控制器中,我有一个 $scope.users 属性:它是一个用户数组。

这个控制器被两个视图使用:/users 和 /users/:id。

我已经看到每次进入用户视图时 $scope.users 模型都是初始化的。

我的问题很简单,如何将 $scope.users 仅应用于 /users 视图而不应用于 /users/:id 视图?

我已经使用 $location.path 方法完成了此操作,但我不知道这是否正确。

PS:我有一个工厂来检索用户,所以我知道它是一个单例...

谢谢你的回答。

4

2 回答 2

1

您可以注入 $element 对象,并通过 dom 搜索以确保您在正确的页面上。

您可以注入 $location 对象并查看 url 是否在正确的页面上。

您可以在 /user 的模板中添加一些内容,使其初始化为数组,然后 user/:id 不会包含相同的调用。

在您的代码中,您可以执行以下操作:

angular.module('myapp').constant('users',[]);
angular.module('myapp').controller('UserCtrl', function(users){
    if(!users.length){
        //push some things into the bloody array
    }
});

我并不是说这是所有方法中最好的。这是最难解释的。它类似于创建一个全局变量,但你不是在创建一个全局变量。您正在您的角度模块上制作一个常量变量。

我相信还有更多的方法。这些只是我想到的几种方式。

于 2013-06-06T20:47:06.320 回答
0

我有答案了!

实际上 AngularJS 它不是一个 MVC 框架,而是一个 MVVM 框架。在这种情况下,控制器是模型(在 MVVM 模式中),$scope 是 ViewModel,HTML 是 View(ng-controller 是纯 .NET MVVM 中的 dataContext)。

在这种情况下,控制器应该只有一个视图!

“一般来说,控制器不应该尝试做太多事情。它应该只包含单个视图所需的业务逻辑。”

http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller

谢谢你们。希望能帮助到你。

于 2013-06-11T08:33:06.760 回答