[英]Dynamic service injection in angular.js
我使用Angular.js
Services
在控制器之間共享一些數據,如下所示:
var mainApp = angular.module("mainApp", []);
mainApp.service('CalcService', function(){
this.square = function(a) {
//do something
}
});
mainApp.controller('CalcController', function($scope, CalcService) {
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
它可以工作,但是如您所見,在控制器中,我必須注入CalcService
並在控制器中使用它。 我的問題是,我有很多服務,在我的應用程序的某些頁面中,我需要注入服務依賴項,而在某些頁面中,我不需要! 如果我將其寫在不需要的頁面中,則會出現錯誤,因為我的控制器位於另一個文件中,並且我沒有加載它。 我該如何克服?
我希望在某些情況下可以設置注射量。 我需要一個If Else語句。 這可能嗎?
我的應用程序結構是這樣的:我有一個主應用程序和一些可以附加到頁面的小部件,但是每個頁面都有不同的小部件,那么我也需要在主模塊中注入適當的小部件服務。 我有一個主模塊和一個主控制,其他控制器內部有許多服務。 每個頁面都有自己的小部件和控制器。 在主控制器中,我必須查看加載了哪些小部件,然后注入其服務
您只能在需要服務時注射。
這是您向其中注入服務的控制器
mainApp.controller('CalcController',['$scope','CalcService',function($scope, CalcService) {
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
}]);
這是您沒有注入服務的控制器
mainApp.controller('Calc2Controller',['$scope',function($scope) {
$scope.square = function(n) {
$scope.result = n * n;
}
}]);
編輯1
看起來您在同一文件中擁有服務和控制器。 這是錯誤的。
您可以看到服務在全局共享數據或封裝可以重用的邏輯。 而控制器則專注於特定的模板。
我建議您使用此結構將服務和控制器分開。
App--
-components
-features
- login
-loginController.js
-login.html
-services
- userService.js
- loginService.js
-libs
- bootstrap.js
- lodash.js
由於您的服務現在是獨立的,因此您可以與任何控制器共享它們。 您可以選擇在何處使用一項服務,在何處不使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.