gpt4 book ai didi

javascript - 为什么我的 Angular ngModel 示例没有抛出错误?

转载 作者:行者123 更新时间:2023-11-28 01:21:45 25 4
gpt4 key购买 nike

我已经阅读了一些关于 Angular $scope 的回复,以及它如何成为一个普通的旧 JavaScript 对象,这意味着它将遵循 JS 的原型(prototype)继承( What are the nuances of scope prototypal / prototypical inheritance in AngularJS? )

既然是这种情况,我很好奇为什么我的以下示例不会抛出错误:

<!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>

基于原型(prototype)继承,我期望发生以下情况:

  1. 当MainCtrl被调用时,它会为MainCtrl及其相应的 View 创建一个$scope对象。
  2. 每当您在输入框中键入内容时,它都会将一些字符串绑定(bind)到 $scope.data.message。
  3. 但是,为了做到这一点,JavaScript 的第一步是尝试解析 $scope.data。
  4. 由于 MainCtrl 函数没有 data 属性,因此它将尝试在 rootScope 中查找 data 属性。
  5. 由于 rootScope 没有数据属性,因此 $scope.data 应解析为“未定义”。
  6. 最后,如果您尝试分配给 undefined.message,这应该会引发错误。

但是,代码运行良好并且数据绑定(bind)正确。有人可以帮我解释一下为什么这不会给我抛出错误吗?

最佳答案

发表我最初的评论是因为我不是 100%,但在检查文档后,这是因为......

“ngModel 将尝试绑定(bind)到通过评估当前作用域上的表达式而给出的属性。如果该属性在此作用域中尚不存在,则会隐式创建该属性并将其添加到该作用域中。”

因此,如果该属性不存在,它将创建,然后为其分配值。

源代码:here

关于javascript - 为什么我的 Angular ngModel 示例没有抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23190044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com