【问题标题】:How to set a model for a single view in Angular JS?如何在 Angular JS 中为单个视图设置模型?
【发布时间】:2013-06-06 18:40:00
【问题描述】:

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

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

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

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

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

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

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

感谢您的回答。

【问题讨论】:

  • “仅适用于 /users”是什么意思?
  • @Bertrand :我希望 $scope.users 变量仅在用户位于 /users url 时才被初始化。

标签: angularjs angularjs-scope angularjs-routing


【解决方案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
    }
});

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

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

【讨论】:

  • 好的,我明白了,所以如果我用 $location.path 来做这不是反模式?
  • 我不喜欢常量系统,在大型应用程序中我可以很好地处理其中的五十个或更多... $location.path 运行良好,但它是一种反模式,我会尝试常量在模块中,我会看到 thx !
【解决方案2】:

我有答案了!

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

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

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

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

谢谢你们。希望对您有所帮助。

【讨论】:

  • 这如何解决您的答案。请解释一下,以便我们学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
相关资源
最近更新 更多