Angularjs 如何在Angular JS中为单个视图设置模型?

Angularjs 如何在Angular JS中为单个视图设置模型?,angularjs,angularjs-scope,angularjs-routing,Angularjs,Angularjs Scope,Angularjs Routing,我在Angular JS中有一个控制器 在这个控制器中,我有一个$scope.users属性:它是一个用户数组 此控制器由两个视图使用:/users和/users/:id 我已经看到,$scope.users模型在每次进入用户视图时都是init 我的问题很简单,如何使$scope.users仅应用于/users视图而不应用于/users/:id视图 我已经用$location.path方法完成了这项工作,但我不知道这是否是正确的方法 PS:我有一个工厂来检索用户,所以我知道这是一个单件 谢谢您的

我在Angular JS中有一个控制器

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

此控制器由两个视图使用:/users和/users/:id

我已经看到,$scope.users模型在每次进入用户视图时都是init

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

我已经用$location.path方法完成了这项工作,但我不知道这是否是正确的方法

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


谢谢您的回答。

您可以插入$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
    }
});
我并不是说这是所有方法中最好的。这是最难解释的。这类似于生成全局变量,但您没有生成全局变量。你在你的角模上做一个常数变量

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

我找到答案了

事实上,它不是一个MVC框架,而是一个MVVM框架。在本例中,控制器是模型(在MVVM模式中),$scope是视图模型,HTML是视图(ng控制器是纯.NET MVVM中的dataContext)

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

一般来说,控制器不应该做太多的工作。它应该只包含单个视图所需的业务逻辑


谢谢你们。希望有帮助。

你说的“仅应用于/users”是什么意思?@Bertrand:我希望$scope.users变量只有在用户位于/users url上时才是init。好的,我明白了,所以如果我使用$location.path,这不是反模式?我不喜欢常量系统,在一个大型应用程序中,我可以得到50个或更多的变量。。。$location.path运行良好,但它是一种反模式,我将在模块中尝试常量,然后看到thx!这是如何解决你的答案的。请解释一下,这样我们可以学习。