我们说我有指令:
<component>
<img ng-src='{{something}}' />
</component>
定义为:
app.directive("component", function() {
return {
scope: {},
restrict: 'E',
transclude: true,
template: "<a href='' ng-click='MyService.doThings()' ng-transclude></a>"
}
});
尽管付出了很多努力,但我还是不明白如何完成两项任务:
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);
}
}
}
});
答案 0 :(得分:10)
您可以通过将源路径绑定到控制器作用域或使用属性的链接方法来访问源路径。
您无法从模板访问服务。您应该将服务注入控制器并在$ 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/