AngularJS-将HTML元素的作用域更改为新的作用域
AngularJS - change scope of HTML element to new scope
我正在学习AngularJS,并做一些奇怪的实验来澄清关于scope
、directives
和dom
的概念。
AIM:将HTML元素<div id="grocery">
的作用域更改为新建的子作用域""
index.html
<html ng-app="eggly" ng-controller="rootCtrl">
<body>
<div id="grocery">
{{box}}
</div>
</body>
</html>
rootCtrl
eggly.controller('rootCtrl',function($scope,$timeout,$compile){
$scope.box = "lunchbox"; --> first assign box = lunchbox
$timeout(function(){
//delete $scope;
var newScope = $scope.$new(); --> create a new scope
newScope.box = "dinnerbox"; ---> Assign new value
$compile($('#grocery'))(newScope); --> compile div with new scope
//newScope.$apply(); --> I think $timeout already do $apply so commented out
},1000);
});
我的问题是:
- 如果我没有在
$timeout
函数中创建new scope
和$compile
,那么我的视图将按预期用dinnerbox
更新 - 如果我在
$timeout
函数中创建new scope
和$compile
,那么我的视图会显示旧值,即lunchbox
,而chrome控制台会显示angular.element($0).scope().box
会显示作用域中的dinnerbox
(在$timeout执行之后)
我做错了什么?
当调用$compile
时,#grocery
的内容是lunchbox
而不是{{ box }}
。此时ng-controller
指令已经链接,绑定信息不能作为纯HTML使用。
这个缺点可以通过使用指令替代{{ }}
绑定来克服:
<div id="grocery"><span ng-bind="box"></span></div>
相关文章:
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- 在AngularJS中将元素添加到作用域时,如何在所有设备上播放声音
- FireFox-在全局作用域中由id名称引用的元素.使用w3c标准
- AngularJS-将HTML元素的作用域更改为新的作用域
- 如果在transclusion之后添加,为什么指令下的动态元素具有错误的作用域
- 如果作用域值等于单击的元素的属性值,则Ng类
- 使用ng-click在作用域内定位元素
- 角度在元素的作用域中保存一个值
- 将元素绑定到不同帧中的现有 AngularJS 作用域
- 多个指令,一个元素具有单独的作用域
- Polymer.dom:dom元素的作用域查询选择器
- Angularjs-元素上有多个指令,其中一个是隔离作用域
- 在绑定元素时从作用域对象添加格式
- 与控制器在同一元素中的自定义指令作用域
- 访问子元素内的父作用域's onclick回调(Atom包)
- AngularJS-$编译一个元素并将作用域传递给它
- 为什么Angular要把ng-scope类放在一个没有附加作用域的元素上?
- 不能从AngularJS的作用域数组中移除元素
- 当方法影响作用域元素时的Angular服务设计