0

контроллерКак использовать службу из директивы для вызова функции?

angular.module('myApp') 
    .controller('myCtrl', [ '$mdDialog', '$mdMedia', 'viewDialog', myCtrl]); 
.. 

function myCtrl( $mdDialog, $mdMedia, viewDialog) { 
    $scope.viewItem = function(ev,id) { 
     viewDialog.ITEM(ev,id) 
    }; 
} 

HTML

<div ng-controller="myCtrl"> 
    <md-list-item ng-repeat="item in myarr"> 
    <a my-view-dialog"> 
     <h4> {{item.id}} </h4> 
    </a> 
    </md-list-item> 
</div> 

Когда я вызываю функция непосредственно из контроллера модального окна отлично работает по щелчку

с помощью директивы

Моей директивы

angular.module('myApp') 
    .directive('myViewDialog', function ($parse) { 
     return { 
      compile: function(tElm,tAttrs){ 
       var exp = $parse('viewItem($event,item.id)') 
       return function (scope,elm){ 
       elm.bind('click',function(){ 
        exp(scope); 
       }); 
       }; 
      } 
     };; 
    }); 

Теперь я хочу удалить зависимость контроллера и напрямую вызвать службу viewDialog из директивы, в которой она не работает.

здесь код для инъекций службы

angular.module('myApp') 
    .directive('myViewDialog', function ($parse, viewDialog) { 
     return { 
      compile: function(tElm,tAttrs){ 
       var exp = $parse('viewDialog.ITEM($event,item.id)') 
      return function (scope,elm){ 
       elm.bind('click',function(){ 
        exp(scope); 
       }); 
       }; 
      } 
      };; 
    }); 
+0

Вы получаете любую ошибку в консоли? – varun

+0

Что происходит? Ошибки на консоли? –

+0

Нет ошибки в консоли – atjoshi

ответ

0

Вместо

.directive('myViewDialog', function ($parse, viewDialog) 

Попробуйте

.directive('myViewDialog', [ '$parse', 'viewDialog', function ($parse, viewDialog) 
0
angular.module('myApp') 
    .directive('myViewDialog',['viewDialog','$parse', function (viewDialog,$parse) { 
    return { 
     compile: function(tElm,tAttrs){ 
      var exp = $parse('viewDialog.ITEM($event,item.id)') 
     return function (scope,elm,attr,ctrl){ 
      elm.bind('click',function(){ 
       exp(scope); 
      }); 
      }; 
     } 
     };; 
}]); 
+0

Директива получает rootScope по умолчанию. – Shrikant

+0

Я пробовал, но не получаю никаких ошибок при нажатии, но все еще не работает – atjoshi

+0

- это ctrl любой конкретный ctrl или просто атрибут. – atjoshi