代码之家  ›  专栏  ›  技术社区  ›  CodyBugstein

如何在AngularJS服务中使用AngularJS指令?

  •  0
  • CodyBugstein  · 技术社区  · 6 年前

    如何在AngularJS服务中使用AngularJS指令?

    在我的AngularJS 1.5应用程序中,我有一个指令,在视图的中心显示一个微调器。我希望能够通过服务激活此微调器。

    因此,例如,可以将服务注入控制器,无论何时调用,它都会触发微调器在屏幕上显示。

    如何将此指令注入服务?

    目前,无论我在哪里寻找,我都只能找到关于如何将服务注入指令的说明,而不能找到相反的方法

    0 回复  |  直到 5 年前
        1
  •  2
  •   georgeawg    6 年前

    方法是使用 $rootScope/$scope event 公交车:

     app.service("dataService", function($rootScope, $http) {
         this.get = function() {
             $rootScope.$broadcast("dataService.Start");
             return $http.get(url).finally(function() {
                 $rootScope.$broadcast("dataService.Done");
             });
         };
     })
    

    在指令中:

     app.directive("spinner", function() {
         return {
             link: postLink,
         };
         function postLink(scope, elem, attrs) {
             scope.$on("dataService.Start", function (event) {
                 elem[0].startSpinner();
             });
             scope.$on("dataService.Done", function (event) {
                 elem[0].stopSpinner();
             });
         }
    });
    

    有关更多信息,请参阅 AngularJS Developer Guide - Scope Event Propagation

        2
  •  0
  •   AmenzO    6 年前

    angular-spinner 然后在索引中包含文件。html 并将dependencie添加到应用程序:

    var myapp = angular.module('myapp', ['angularSpinner']);
    

    然后,您可以使用自定义指令拦截所有http请求,而无需在每个http调用之前添加start,并在之后添加stop(代码更少)

    app.directive('usSpinner', ['$http', '$rootScope', function ($http, $rootScope) {
      return {
        link: function (scope, elm, attrs) {
          $rootScope.spinnerActive = false;
          scope.isLoading = function () {
            return $http.pendingRequests.length > 0;
          };
    
          scope.$watch(scope.isLoading, function (loading) {
            $rootScope.spinnerActive = loading;
            if (loading) {
              elm.removeClass('ng-hide');
            } else {
              elm.addClass('ng-hide');
            }
          });
        }
      };
    
    }
    

    然后在html中将以下内容添加到正文:

    <span us-spinner></span>