我不确定标题是否正确传达了我想要清晰的功能。但是让我说出来。
在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添加此功能?(我假设功能)是否严格要求灵活性?
答案 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,则可以轻松避免代码崩溃,如果您尝试访问某些不属于每个对象的属性。