如何从服务激活微调器指令
How to activate a spinner directive from a service
如何在 AngularJS 服务中使用 AngularJS 指令?
在我的 AngularJS 1.5 应用程序中,我有一个在视图中心显示微调器的指令。我希望能够通过服务激活此微调器。
例如,可以将服务注入到控制器中,无论何时调用,它都会触发微调器显示在屏幕上。
如何将此指令注入服务?
目前,我到处都只能找到有关如何将服务注入指令的说明,而反过来却找不到
方法是使用$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
您可以安装angular-spinner
然后将文件包含在 index.html
并将依赖项添加到您的应用程序:
var myapp = angular.module('myapp', ['angularSpinner']);
然后您可以使用自定义指令拦截所有 http 请求,而无需在每个 http 调用之前添加开始并在之后停止(代码更少)
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>
如何在 AngularJS 服务中使用 AngularJS 指令?
在我的 AngularJS 1.5 应用程序中,我有一个在视图中心显示微调器的指令。我希望能够通过服务激活此微调器。
例如,可以将服务注入到控制器中,无论何时调用,它都会触发微调器显示在屏幕上。
如何将此指令注入服务?
目前,我到处都只能找到有关如何将服务注入指令的说明,而反过来却找不到
方法是使用$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
您可以安装angular-spinner 然后将文件包含在 index.html 并将依赖项添加到您的应用程序:
var myapp = angular.module('myapp', ['angularSpinner']);
然后您可以使用自定义指令拦截所有 http 请求,而无需在每个 http 调用之前添加开始并在之后停止(代码更少)
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>