2016-12-07 4 views
0

Директива ОдинAngularJS - Директива Директивы вызова функции

myApp.directive("myDirective", function ($compile, $rootScope) { 

    var linker = function (scope, element, attrs) 
    { 

     var myEl3 = angular.element(document.querySelector("#mydiv" + objMode + Id)); 
     myEl3.after($compile("<span id='fullscreen" + objMode + Id + "' ng-show='true' uib-tooltip='Full Screen' tooltip-placement='left' class='fullscreen text-right pad-0 font-10' ><button id='fullscren" + Id + "' ng-click=doFullScreen('" + vlcPlayerId + "')></button></span></span>")($rootScope)); 

     //this function is used for vlcid. 
     scope.getVLC = function (name) { 
      if ($window.document[name]) { 
       return $window.document[name]; 
      } 
      if ($window.navigator.appName.indexOf("Microsoft Internet") == -1) { 
       if ($window.document.embeds && $window.document.embeds[name]) 
        return $window.document.embeds[name]; 
      } else { 
       return $window.document.getElementById(name); 
      } 
     } 

     //this function is used for fullscreen. 
     scope.doFullScreen = function (vlcPlayer) { 
      var vlc = scope.getVLC(vlcPlayer); 
      if (vlc) { 
       vlc.video.toggleFullscreen(); 
      } 
     } 

    }; 

    return { 
     restrict: "E", 
     link: linker 
    }; 
}); 

Директива Два

myApp.directive("myNewDirective", function ($compile, $rootScope) { 

    var linker = function (scope, element, attrs) 
    { 

     scope.getVLC = function (name) { 
      if ($window.document[name]) { 
       return $window.document[name]; 
      } 
      if ($window.navigator.appName.indexOf("Microsoft Internet") == -1) { 
       if ($window.document.embeds && $window.document.embeds[name]) 
        return $window.document.embeds[name]; 
      } else { 
       return $window.document.getElementById(name); 
      } 
     } 

     scope.doFullScreen = function (vlcPlayer) { 
      var vlc = scope.getVLC(vlcPlayer); 
      if (vlc) { 
       vlc.video.toggleFullscreen(); 
      } 
     } 

    }; 

    return { 
     restrict: "E", 
     link: linker 
    }; 
}); 

Как вызвать scope.doFullScreen определены в myNewDirective к myDirective, так что я могу повторно использовать ту же функцию и не объявлять одну функцию в двух директивах?

P.S .: Я не хочу объявлять функцию в сервисе и вводить в директиве.

ответ

0

Вы можете объявить эту функцию в службе и добавить ее с помощью инъекции зависимостей, это будет более чистый способ.

myApp.service("directiveService", function ($compile, $rootScope) { 

    var linker = function (scope, element, attrs) 
    { 

     scope.getVLC = function (name) { 
      if ($window.document[name]) { 
       return $window.document[name]; 
      } 
      if ($window.navigator.appName.indexOf("Microsoft Internet") == -1) { 
       if ($window.document.embeds && $window.document.embeds[name]) 
        return $window.document.embeds[name]; 
      } else { 
       return $window.document.getElementById(name); 
      } 
     } 

     scope.doFullScreen = function (vlcPlayer) { 
      var vlc = scope.getVLC(vlcPlayer); 
      if (vlc) { 
       vlc.video.toggleFullscreen(); 
      } 
     } 

    }; 

    return { 
     linker: linker 
    }; 
}); 

И вы будете держать ваши директивы просто:

myApp.directive("myNewDirective", function (directiveService) { 

    return { 
     restrict: "E", 
     link: directiveService.linker 
    }; 
}); 

Надеется, что это помогает!

+0

Вы также должны написать для этого код. – Deadpool

+0

благодарю вас за ваш совет! – Adrien

Смежные вопросы