如果您没有在AngularJS模型中使用。(点),那么您做错了吗?

时间:2013-08-08 14:13:24

标签: angularjs angularjs-scope

我记得在AngularJS的视频中看到这句名言,应该总是使用a。 (点)你的模特。

好吧,我想按照这个说我有

   var item = {}
   item.title = "Easy Access to support";
   item.available = true;
   item.price = 31.67;

所以我认为这很有效。

  {{ item.title }}
  {{ item.available }}

我正在使用一个点,所以我觉得这很好。

但我有一些属性,我不认为是模型的一部分,但也许我错了。例如,我有一个属性,我用来启用或禁用使用ng-disable的按钮,我已使用点格式输入。它的基本输入就是这样

 $scope.disableButton = true;

我就像

一样使用它
 ng-disable="disableButton"......

我应该将模型的这一部分作为“项目”吗?或者创建另一个js对象,这样我就可以使用点来保存这个属性了吗?

有人知道这是否可以接受,或者我应该用.dot做所有事情(即使是这些简单的属性)

由于

1 个答案:

答案 0 :(得分:46)

“模型中应该总是有一个点”是指ngModel。该指令执行双向绑定。如果你双向绑定到一个原语(例如你的情况下是一个布尔值),那么setter会将它设置在当前作用域而不是定义它的作用域上,当你有一个大用户时,这会导致头痛 - 与很多子范围的接口。 它不引用其他指令,例如ngDisable有关此特定问题的详细信息,请参阅this explanation

示例场景:具有$scope.foo = "bar"的父作用域和具有<input type="text" data-ng-model="foo">的子作用域。它最初会显示bar,但是一旦用户更改了值,就会在子范围上创建foo,绑定将读取和写入该值。父级foo将保留bar。希望能够很好地总结它。

因此,对于ngModel目的,您可能必须创建一个对象来解决此类绑定问题,但对于任何其他指令,您应该进行常规的逻辑分组。