Javascript 为什么';我的模型示例不会抛出错误吗?
我读过一些关于Angular$scope的回复,以及它是一个普通的老JavaScript对象,这意味着它将遵循JS的原型继承() 既然如此,我很好奇为什么下面的示例没有抛出错误:Javascript 为什么';我的模型示例不会抛出错误吗?,javascript,angularjs,angularjs-scope,angular-ngmodel,Javascript,Angularjs,Angularjs Scope,Angular Ngmodel,我读过一些关于Angular$scope的回复,以及它是一个普通的老JavaScript对象,这意味着它将遵循JS的原型继承() 既然如此,我很好奇为什么下面的示例没有抛出错误: <!doctype html> <html ng-app='MyApp'> <head> <meta charset='utf-8'> <title>Egghead</title> <script src='https://aja
<!doctype html>
<html ng-app='MyApp'>
<head>
<meta charset='utf-8'>
<title>Egghead</title>
<script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js'></script>
<script>
var app = angular.module('MyApp', []);
app.controller('MainCtrl', ['$scope', function ($scope) {
}])
</script>
</head>
<body>
<div ng-controller='MainCtrl'>
<input type='text' ng-model='data.message'>
<p>{{ data.message }}</p>
</div>
</body>
</html>
书呆子
var-app=angular.module('MyApp',[]);
app.controller('MainCtrl',['$scope',函数($scope){
}])
{{data.message}
基于原型遗传,以下是我希望发生的事情:
但是,代码运行良好,数据绑定正确。有人能帮我解开为什么这不会给我带来错误吗?为什么它不会失败,我的意思是
ngModel
,因为它是一个双向数据绑定指令。你可以在另一篇文章中阅读更多关于这方面的内容:
但解释这种行为的更简单的方法是,如果变量在
ngModel
中使用,即使它不存在,也将其声明为作用域的一部分。发表了我的原始评论,因为我不是100%,但在检查文档后,这是因为
ngModel将尝试通过计算当前作用域上的表达式来绑定到给定的属性。如果该属性在此作用域上不存在,则将隐式创建该属性并将其添加到作用域中
因此,如果该属性不存在,它将在指定值时创建
src:将此作为评论,因为我确信会有更技术性的回应。从我所读到的,直到抛出错误为止,你都是正确的。angular没有尝试分配给undefined.message并抛出错误,而是检测到它未定义,并在作用域上创建它,然后分配值。感谢您将我指回到文档!这就解释了这一点,但接下来的问题是,“data”属性是分配给MainCtrl的$scope对象还是rootScope对象。我不确定的原因是,Angular似乎正在范围链上行走,它处理的最后一个范围对象似乎是rootScope对象。数据将绑定到您所在控制器的范围,因此在本例中,MainCtrl。我这么说是因为文档说“通过计算当前作用域上的表达式”,然后又说“如果该属性在此作用域上不存在”,所以这是指当前作用域,它不是$rootScope,而是mainCtrl作用域。谢谢Tyler的帮助!