在Angular中设置上下文范围

时间:2016-11-05 19:16:18

标签: javascript angularjs meteor

我的变量绑定到我的控制器中的this,在我的路线指定中,我使用controllerAs: 'game'。这允许我使用{{game.var}}将它们包含在我的HTML中。有时,我绑定了我想要显示的对象,但这迫使我反复写{{game.object.a}}{{game.object.b}}{{game.object.c}}

在之前使用Meteor的项目中,我可以使用with关键字设置数据上下文。

{{#with object}}
  {{a}}
  {{b}}
{{/with}}

但我在Angular中没有看到类似的功能。我能够做的最接近的工作是添加属性ng-repeat="object in [game.object]"。这有效,但它不是很语义。当game.object发生变化时,这也会让我快速闪现第二个元素,因为在删除第一个元素之前加载新元素。

这个问题有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

Angular故意使用此上下文范围来避免父和子范围之间的混淆。如果您没有使用子范围,则可以完全跳过控制器作为语法,并将所有内容绑定到模型中的$scope,这会将game.agame.b变为仅a您和视图中的b

如果您正在使用子范围,您仍然可以跳过controllerAs,但随后它会让视图中给定模型所属的控制器变得混乱。没有withusing语法,因此您需要在引用这些模型的任何地方声明绑定范围game.achildGame.a,这可能过于冗长但至少是清楚。

另见this post

关于flash问题,我会避免将ng-repeat用于语义目的。它的主要用例是显示一组结构相似的数据。