传递到指令而不将其添加到范围
Passing into a directive without adding it to scope
我有一个指令,其中项目列表(数组)通过控制器的作用域传递到指令的作用域中,然后指令的模板可以访问这些项。
我希望它能够将项目列表传递给指令(然后在链接函数中使用),然后无法通过指令的模板直接访问。
即,如果我们有以下指令:
directive('itemList', function(){
return {
scope: {
items: '='
}
link: function(scope, elem, attrs){
var item-list = scope.items;
// ... want to manipulate first ...
}
}
})
变量 scope.items 现在可用于指令使用的任何模板。而我不希望是这种情况,并希望在不告知范围的情况下将某些内容传递给指令。这可能吗?
由于指令范围几乎是指令模板使用的范围,因此我没有看到任何明显的方法来以严格的信息隐藏方式执行此操作。但是,为什么不对传递的范围变量以及模板绑定的内容使用不同的名称呢?例如,如果您说scope: { myPrivatePassedItems: '=items' }
,您现在可以根据需要使用scope.myPrivatePassedItems
,然后再将其设置为 scope.items
。使用这种方法,指令和指令模板中的 HTML 只看到"项目",但在内部你的指令有自己的"私有"变量。
我应该补充一点,以上是从使用者到指令模板的单向数据流所需的简单更改。如果还需要更新原始 items 数组,则还需要在完成初始设置后在scope.items
数组上添加一个scope.$watch
。然后,您需要将这些更改(可能带有修改)带回scope.myPrivatePassedItems
以便更新使用者的数组。
$parse
服务在不使用 scope: {}
的情况下检索值,但您将丢失使用 scope: { items: '=' }
固有获得的 2 路数据绑定。正如Dana Cartwright所提到的,如果您需要2路绑定,则必须使用手表手动设置。
directive('itemList', function($parse){
return {
link: function(scope, elem, attrs){
var itemList = $parse(attrs['items'])(scope);
// do stuff with itemList
// ...
// then expose it
scope.itemList = itemList;
}
};
});
- 将值添加到使用_.map&_创建的变量中.范围
- 将类添加到jquery中的第n个子范围
- 将范围添加到角度种子默认视图控制器时,测试套件现在失败
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- 输入类型文件将文件路径添加到范围
- 使用ng repeat添加多个视图实例时的范围界定问题
- 显示已动态添加的范围
- 如何将固定范围的垂直线添加到 D3.js 图表
- 通过添加自动标记库来了解 meteorjs 范围
- 输入范围使用按钮添加值
- 如何让此函数从范围中添加或减去并返回它
- 如何添加范围的标题属性值
- 传递到指令而不将其添加到范围
- 如何将范围滑块添加到轨道应用程序
- D3 时间刻度将前后时间范围添加时间间隔的百分比
- 在 Algolia 即时搜索范围滑块的最大值末尾添加“+”
- jQuery 将类添加到单击的单选按钮范围
- WKHTMLTOPDF - 添加一个侧边栏,该侧边栏跟随不同的文本范围
- JavaScript DOM向窗口选择对象添加范围
- 在Google's数据层地图上添加范围滑块来过滤数据