从角度工厂或指令导出方法以供以后使用
Exporting methods from an angular factory or directive to use later
我使用Angular开发了一个Web应用程序.js(这是我的第一个)。该应用程序具有一系列交互式图形(座位图);所以我创建了一个模块来处理 Raphael 的东西,包括一个指令,如下所示:
angular.module('raphael', [])
.factory('fillData', function() {
return function(paper, data) {
var canvas = $(paper.canvas);
// Do fill the data and more ...
canvas.on('click', '[id]', function(e) {
this.classList.toggle('selected');
});
};
})
.directive('raphael', ['fillData',
function(fillData) {
return {
scope: {
raphael : '&',
seatData: '&'
},
link: function(scope, element, attrs) {
var paper = null;
var updateSeatData = function() {
if(scope.seatData()) fillData(paper, scope.seatData());
};
scope.$watch(scope.raphael, function() {
element.empty();
paper = new Raphael(element[0], '100%', '100%');
paper.add(scope.raphael());
updateSeatData();
});
scope.$watch(scope.seatData, function() {
updateSeatData();
});
}
};
}
]);
一切正常,直到我们需要在另一个级别中与向量进行交互。假设,获取所选席位的计数,或取消选择所有席位(由文档中的某个随机元素触发)。我似乎无法找到实现它的合理方法。
你有什么建议?有没有其他方法可以在 angular 中使用第二个库?
据我了解,您希望具有某些内部状态的指令,但您希望从外部访问其状态(其他指令,服务等)。如果是这样,那么似乎您可以将服务用作状态持有人。在这种情况下,您的指令不会保存状态,但它将访问它。
你说的合理实现方式是什么意思?它看起来不错,尽管我更愿意绑定到属性 seatData 而不是传递函数,例如
scope: {
seatData: '='
}
然后观看
scope.$watch('seatData', function() {
fillData(paper, scope.seatData);
});
这是你的问题还是我没有理解?
好的,这是我提出的解决方案;我访问了父范围并将基本方法放在那里。
将此行添加到fillData
工厂:
return {
deselectAll: function() { ... }
};
并将updateSeatData
方法更改为:
var updateSeatData = function() {
if(scope.seatData) {
var result = fillData(paper, scope.seatData[scope.level]);
angular.extend(scope.$parent, result);
}
};
附言仍然愿意听到更多...
相关文章:
- AngularJS:$q.dedefe()不能由工厂方法共享
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 修复AngularJS错误:提供程序必须从$get工厂方法返回值
- 有没有一种方法可以在设计模式下将ng模型或工厂绑定到iframe
- 如何重用ajax工厂方法来设置$scoped变量
- 从角度工厂或指令导出方法以供以后使用
- angular.js:13424 ReferenceError:在控制器中使用工厂方法时未定义索引
- Angularjs-向工厂传递数据的方法不起作用
- 如何从变量中动态调用工厂方法
- jasmine 2.0测试angularjs的工厂方法,这是一个承诺
- 如何访问控制器内的工厂方法
- 工厂方法似乎未定义
- 调用工厂方法时出现 Angularjs 错误
- 尝试在 JavaScript 中使用工厂调用方法时未定义
- 如何使用getter和setter方法创建一个Angular工厂而不遇到竞争条件
- 在angularjs工厂方法中添加事件侦听器无法按预期工作
- 如何在Angular中的工厂方法中返回数据
- 工厂方法没有't return-TypeError:无法读取属性'那么'的未定义
- AngularJS-错误:[$injector:pget]提供程序'函数()'必须定义$get工厂方法
- $rootScope和工厂方法