我试图将工厂添加到现有指令中。目前该功能仍在制定中,我仍然相当新,有角度但强大的JS。就一般JS范围而言,一切似乎都应该没问题。但是,设备和remoteTerminalFactory在进入链接功能时不存在。我在返回之前添加了一个变量,而且也不再存在。它必须是某种范围问题,但我不明白会导致问题的原因。
'use strict';
angular.module('App')
.directive('modalRemoteTerminal', ['equipment', 'remoteTerminalFactory', function (equipment, remoteTerminalFactory) {
var test = true;
// equipment & remoteTerminalFactory exist as expected
return {
templateUrl: 'app/equipment-detail/health-tab/modal-remote-terminal/remote-terminal.html',
restrict: 'E',
link: function (scope, element, attrs) {
// test, equipment & remoteTerminalFactory are undefined
scope.modalCtrlRemoteTerminal = {};
scope.remoteTerminal = function(){
scope.modalCtrlRemoteTerminal.openModal();
};
}
};
}]);
答案 0 :(得分:1)
为了访问角度工厂,必须实现几个基本的东西。
请参阅此Plunker,我已将您的指令放在角应用程序中,并创建了模拟工厂。
以下是要点:
实例化服务(在我们的例子中是模拟工厂)
angular.module('App').factory('equipment', function () {
return {
tellSomething: function(text){
console.log(text)
}
};
});
...
将服务注入指令(这部分在你的代码片段中看起来很好),尝试使用服务方法来测试
link: function (scope, element, attrs) {
//showing the access to injected factories/services
equipment.tellSomething("I'm equipment factory");
remoteTerminalFactory.tellSomething("I'm remoteTerminalFactory factory");
...
确保所有角度文件都按正确的顺序导入index.html
(主要是先用app实例化导入文件)
<script src="script.js"></script>
<script src="service.js"></script>
<script src="directive.js"></script>
在index.html
<body ng-app="App">
<h2>Angular app</h2>
<hr>
<modal-remote-terminal></modal-remote-terminal>
</body>
有关详细信息,请参阅Plunker。您将看到来自工厂的测试方法已执行,这意味着可以访问服务。