添加指令作用域会使其余部分不可更新
Adding directive scope makes the rest non-updateable
有一个叫做foo
的指令,它的定义是这样的:
<div ng-app="app" ng-controller="mainController">
{{ name }}
<foo param="123"></foo>
</div>
下面是相关的初始化片段:
var app = angular.module('app', []);
app.controller('mainController', function($scope){
$scope.name = 'Initial name';
});
app.directive('foo', function(){
return {
restrict : 'E',
controller : function($scope){
$scope.name = 'Name defined in directive';
console.log($scope.param); // undefined
}
};
});
按预期工作,用Name defined in directive
覆盖Initial name
。
然而,由于有param
属性,我想访问它的值。所以我做了这样的单向绑定:
return {
restrict : 'E',
controller : function($scope){
$scope.name = 'Name defined in directive';
console.log($scope.param); // 123 as expected
},
scope : {
param : "@"
}
}
这破坏了父作用域的更新。现在当运行它时,它呈现Initial name
而不是预期的Name defined in directive
。那么问题是什么呢?
当你使用作用域选项时,你创建了一个隔离作用域,根据定义,它与父作用域分开。
您需要将name
添加到您的隔离作用域并像param
一样传递它,或者您需要删除作用域并在父作用域上定义param
。
以下是Angular文档对隔离作用域的解释:
顾名思义,该指令的隔离作用域隔离了除了你显式添加到作用域的模型之外的所有东西:{}hash对象。这在构建可重用组件时很有帮助,因为它可以防止组件更改模型状态,除了您显式传递的模型。
注意:通常情况下,作用域原型继承自它的父级。孤立作用域不需要。参见"指令定义对象-作用域"节,获取有关隔离作用域的更多信息。
相关文章:
- 多个进度条可视地只更新一个进度条
- 下拉列表未从计算的可观察项更新
- 可观察元素数组未更新
- 如何在 Knockout.js 中更新可观察数组后立即使用 DOM 容器
- 在简单的可重用 D3 图表中更新数据
- 更新挖空中可观察数组中项目的属性
- 如何在谷歌地图javascript中在地图上拖动标记(可拖动方向)时显示更新的坐标
- 挖空映射:加载数据后,父模型中的计算可观察量不会更新
- 对可观察数组foreach的更新删除了格式化knockoutjs
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- 剔除不更新辅助表的可观察数组
- 多个可拖动标记未更新
- 可拖动和可排序项目编号在更改时更新
- 正在更新Knockoutjs可观察数组项
- 敲除可观察数组并没有更新从数组中移除元素的视图
- Magento 1.9.2-更新自定义属性'delivery_time'在可配置的产品过程中
- Angularjs 可编辑的字体头不更新范围
- D3.js:绘制简单、可更新的折线图
- 在传单地图上设置并拖动标记可更新表单输入字段,而无需发送
- 如何在WSO2ESB中创建全局变量-必须是可更新的