为什么angularjs的作用域是允许在初始化之前访问变量
Why angularjs scoping is allow access variable before initialization
当在angular js包含的html文件中执行此代码片段时。
<p>{{a}} remains {{a = 2;}}</p>
它没有通过引用错误异常。
但是angularjs是在普通js的基础上构建的,为什么会有这样的微妙呢?
下面是纯js中的等效代码:
alert(a);
a = 2;
作为我的期望,而执行这通过引用错误异常,但为什么不angularjs.
因为你的第一个angular模板片段不是javascript的直接声明,它是由angular的模板引擎计算的。而且,它不会产生javascript错误输出,因为当你第一次写{{a}}
时,你为范围内的变量a
创建了一个模板引擎输出,这在当时是未定义的。但是,当你写{{ a = 2; }}
时,你触摸作用域来声明a
,这使得角引擎重新绘制代码片段并应用一个新的绑定值,并在{{a}}
代码片段上产生一个有效的输出。
<p ng-controller="AppCtrl">{{a}} remains {{ declare(); }}</p>
angular.module('app', [])
.controller('AppCtrl',
['$scope', '$timeout',
function ($scope, $timeout) {
$scope.declare = function (){
$timeout(function(){$scope.a = 2;}, 2000);
}
}]);
此代码在第一时间将生成remains
,在模板求值后2秒将生成2 remains
。
相关文章:
- 使用javascript函数在页面初始化后加载jquery
- 未捕获错误:无法在初始化之前调用方法;
- 如何在剑道网格初始化后设置pageSizes
- React redux初始化功能,无论状态变化如何
- 为什么可以't Protractor在自动初始化的Angular网站上查找Angular
- 尝试初始化()Spine's控制器和故障
- Angular.js延迟控制器初始化
- 对插件初始化后动态加载的元素进行样式设置
- 骨干 - 当用户通过特定帖子访问网站时,如何管理集合初始化
- JS原型是否可以访问初始化期间传递给对象的参数
- 通过初始化循环访问数组中元素的属性来创建计数对象
- 如何在视图中呈现部分 js 或访问在应用程序/资产中的 js.erb 文件中的控制器操作中初始化的实例变量/方法
- 如何访问动态生成的选择列表的表单元素值;s在初始化时隐藏
- 使用let初始化的函数在被this访问时不被替换
- tinyMce在第二次访问角局部视图时未初始化
- 为什么angularjs的作用域是允许在初始化之前访问变量
- 可以't从对象内部访问数组(未初始化)
- 属性在初始化中可访问,在模板中不可访问
- 私有成员(使用闭包),为什么初始化后添加的函数不能访问私有成员?
- 在Javascript中第一次访问时初始化属性