为什么angular允许动态对象创建?

时间:2016-08-11 14:22:20

标签: javascript angularjs

我不确定标题是否正确传达了我想要清晰的功能。但是让我说出来。

在javascript中,我们可以将变量实例化为空对象:

var person = {};

我们可以轻松地为其设置属性

person.name = "Bob"

但是,我们无法通过使用属性来分配对象:

person.pet.name = "Bob"
> Uncaught TypeError: Cannot set property 'name' of undefined

角度你可以。例如,这个适度的代码。我有一个控制器:

angular.module('someModule', [])
  .controller('someController', [
    Callback
  ]

function Callback(){
  this.person = {}
}

然后视图包含:

<input type="text" data-ng-model='vm.person.pet.name'>

其中vm是表示控制器的视图模型。当我记录从输入中获取的结果时,您会得到一个person对象,其中pet子对象的属性为name

是什么给出的?为什么angular添加此功能?(我假设功能)是否严格要求灵活性?

2 个答案:

答案 0 :(得分:3)

来自docs

  

<强>赦

     

表达式评估对undefined和null是宽容的。在JavaScript中,如果a不是对象,则评估a.b.c会引发异常。虽然这对于通用语言有意义,但表达式评估主要用于数据绑定,通常如下所示:

{{a.b.c}}
  

如果a未定义(或许我们正在等待服务器响应,并且很快就会定义),则显示除了抛出异常更有意义。如果表达式评估不宽容,我们必须编写使代码混乱的绑定,例如:{{((a || {})。b || {})。c}}

     

类似地,在undefined或null上调用函数a.b.c()只返回undefined。

简而言之,html <input type="text" data-ng-model='vm.person.pet.name'>中的表达式不会及时更改,但vm.person.pet.name的实际值会发生变化。

答案 1 :(得分:0)

我认为这是一个功能。想象一下,你有一组不同类型的对象,例如人与动物。

人物反对:

{
   name: "someName",
   lastname: "someLastName
}

动物对象:

{
   name: "someName"
   //Without lastname 
}

如果将包含这两种类型对象的对象数组放入ng-repeat,则可以轻松避免代码崩溃,如果您尝试访问某些不属于每个对象的属性。