呼叫服务方法
问题描述:
比方说,我有一个指令:呼叫服务方法
<component>
<img ng-src='{{something}}' />
</component>
定义为:
尽管我的努力,我不明白如何完成两个任务:
- 如何访问内部图像源路径?
- 如何通过此路径服务
MyService
? (认为灯箱包装的)与解
更新:
app.directive("component", function(LightboxService) {
return {
restrict: 'E',
transclude: true,
replace: true,
template: "<a href='' ng-click='lb()' ng-transclude></a>",
link: function (scope, element, attrs) {
scope.lb = function() {
var src = $(element).find("img").attr("src");
LightboxService.show(src);
}
}
}
});
答
您可以通过它绑定到你的控制器范围或使用属性的链接方法访问源路径。
您无法从模板访问服务。您应该将您的服务注入到控制器中,并在$ scope中定义一个函数以从模板调用。
检查下面的指令:
app.directive("component", function() {
return {
scope: {
ngSrc: "@", //Text Binding
},
controller: function($scope, MyService) {
$scope.doThings = function() {
MyService.doThings();
}
},
restrict: 'E',
transclude: true,
template: "<a href='{{ng-src}}' ng-click='doThings' ng-transclude></a>"
}
});
您可以了解更多关于隔离范围在这里的指令: https://umur.io/angularjs-directives-using-isolated-scope-with-attributes/
我曾与一个链接的方法试了一下,它的工作原理;如果我在调用服务方法的内部作用域中定义一个方法,那么工作方式:)似乎是正确的方法,谢谢! (我在帖子中包含了我的解决方案) – Cranio 2014-09-05 12:43:53