AngularJS指令访问相同的作用域对象——避免覆盖
AngularJS directives accessing the same scope object - avoid overwrite
我正试图将一个有角度的对象包装成一个模板,然后我应该能够通过使用指令来实例化。在这种情况下,每个指令都是一种类型的小部件。
问题来自于我正在编写的指令基于相同类型的事实,因此在实例化指令时,我在全局作用域中跟踪小部件对象。我在
这几行有一些东西.directive('lineChart', ['$interval', '$compile', 'widgetDataService',
return {
restrict: 'E',
scope: false,
templateUrl: 'templates/lineChart.html',
link: function(scope, elm, attrs) {
var obj = {
guid: attrs['guid'],
datasource: undefined
}
scope.widgets.push(obj)
...
那么在模板中我可以输入:
...
k-data-source="widgets[{{index}}].datasource"
...
这里的想法是,指令的后续使用将导致顺序初始化模板-因此每个模板将获得其各自的索引。然而,这不起作用。如果我不止一次地使用一个指令,那么所有实例化的模板都会得到最后一个索引,这可能意味着angular会在不同的阶段分离该实例。
是否有一种方法可以使用全局对象来跟踪指令的底层对象,但仍然让它们在运行时传递不同的索引?
你可以在指令的工厂函数中定义和设置一个变量(因为它只被调用一次),然后在链接阶段增加它:
.directive('lineChart', ['$interval', '$compile', 'widgetDataService',
function($interval, $compile, widgetDataService) {
var index = 0; //initialize index
return {
restrict: 'E',
scope: true,
templateUrl: 'templates/lineChart.html',
link: function(scope, elm, attrs) {
var currentIndex = index++; //increment on linking
scope.index = currentIndex;
var obj = {
guid: attrs['guid'],
datasource: undefined
}
scope.$parent.widgets[currentIndex] = obj;
scope.$on('$destroy', function () {
index--;
});
...
在视图中:
k-data-source="$parent.widgets[{{index}}].datasource"
相关文章:
- 如何在循环中使用jQuery.on()方法,而不覆盖我循环的对象
- 如何使用自定义功能覆盖时间轴对象.js时间轴对象的_repaintMinorText
- 如何覆盖 javascript 对象数组中的元素
- 合并两个对象而不覆盖
- 覆盖外部对象's函数在Internet Explorer中使用JavaScript
- IE中对象上的Div覆盖
- 使用原型时,JavaScript对象会被覆盖
- (Javascript)覆盖对象内置或继承的属性
- 覆盖对象's的长度属性
- JavaScript两个对象-互相覆盖
- 在javascript中,如何将相同的对象两次推送到一个数组中,并进行一些修改而不覆盖数组
- Javascript 覆盖对象的方法
- 保护公共方法,使其在 javascript 中被 chield 对象覆盖
- 为什么我的 JS 循环会覆盖对象中以前的条目
- 恢复覆盖的窗口.JSON 对象
- 嵌套对象相互覆盖
- 将多个对象推入JavaScript数组,但会导致对象覆盖
- 为什么可以't继承的对象覆盖继承调用中的原型函数
- 对象覆盖不起作用
- Javascript多维对象覆盖上次插入的项