angularjs – 从指令模板调用服务方法

前端之家收集整理的这篇文章主要介绍了angularjs – 从指令模板调用服务方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个指令:
  1. <component>
  2. <img ng-src='{{something}}' />
  3. </component>

定义为:

  1. app.directive("component",function() {
  2. return {
  3. scope: {},restrict: 'E',transclude: true,template: "<a href='' ng-click='MyService.doThings()' ng-transclude></a>"
  4. }
  5. });

尽管我付出了很多努力,但我还是不明白如何完成两项任务:

>如何访问内部图像源路径?
>如何将此路径传递给MyService服务? (想想一个灯箱包装)

更新解决方案:

  1. app.directive("component",function(LightBoxService) {
  2. return {
  3. restrict: 'E',replace: true,template: "<a href='' ng-click='lb()' ng-transclude></a>",link: function (scope,element,attrs) {
  4. scope.lb = function () {
  5. var src = $(element).find("img").attr("src");
  6. LightBoxService.show(src);
  7. }
  8. }
  9. }
  10. });
>您可以通过将源路径绑定到控制器作用域或使用属性链接方法来访问源路径.
>您无法从模板访问服务.您应该将服务注入控制器并在$scope中定义一个函数以从模板中调用.

检查以下指令:

  1. app.directive("component",function() {
  2. return {
  3. scope: {
  4. ngSrc: "@",//Text Binding
  5. },controller: function($scope,MyService) {
  6. $scope.doThings = function() {
  7. MyService.doThings();
  8. }
  9. },template: "<a href='{{ng-src}}' ng-click='doThings' ng-transclude></a>"
  10. }
  11. });

您可以在此处了解有关具有隔离范围的指令的更多信息
https://umur.io/angularjs-directives-using-isolated-scope-with-attributes/

猜你在找的Angularjs相关文章