2
我有一個Angular UI模式,我想使用下面的方法,我用它來保存在控制器上,它包裝我的整個應用程序(metaCtrl) ,但模式似乎創造了他自己的孤立範圍(已知問題)。在服務中存儲泛型控制器函數以獲得它們在隔離範圍內
我的解決方案是將此函數存儲在服務中,並將其從服務中返回到我需要的任何地方。
問題是我沒有這種方式引用當前範圍,並且向該函數添加另一個參數將是一個頭大的問題。
嘗試使用$ eval,$ injector,甚至手動注入$ scope,似乎沒有任何工作。
factory('utils', function($location, $http, $window, $rootScope, $injector, API_URL, WBSITE_HOST){
var baseUrl = API_URL;
var staticUrl = WBSITE_HOST;
var config = {withCredentials: true, headers:{'Accept-Language':"en"}};
var prevLang = undefined;
var helpers = {
scope: {},
showNotification: function(type, duration, msg, elmName){
var $scope = this.scope || $injector.get("$scope");
if(type == "success"){
var $scope = $injector.get("$scope");
$scope.layout.success.message = msg;
$scope.layout.success.visible = true;
if(duration === null)
return
$timeout(function(){
$scope.layout.success.visible = false;
$scope.layout.success.message = "";
}, duration);
}
else if(type == "error"){
if(elmName)
$scope.layout.error.focusElm = elmName;
$scope.layout.error.message = msg;
$scope.layout.error.visible = true;
if(duration === null)
return
$timeout(function(){
$scope.layout.error.visible = false;
$scope.layout.error.message = "";
}, duration);
}
else if(type == "persistent"){
$scope.layout.persistent.message = msg;
$scope.layout.persistent.visible = true;
}
},
closeNotification: function(){
var $scope = this.scope || $injector.get("$scope");
$scope.layout = $scope.layout ? $scope.layout : {};
$scope.layout.success = $scope.layout.success ? $scope.layout.success : {};
$scope.layout.error = $scope.layout.error ? $scope.layout.error : {};
$scope.layout.persistent = $scope.layout.persistent ? $scope.layout.persistent : {};
$scope.layout.success.visible = false;
$scope.layout.success.message = "";
$scope.layout.error.visible = false;
$scope.layout.error.message = "";
// $scope.layout.persistent.visible = false;
// $scope.layout.persistent.message = "";
}
}
return{
getHelper: function(param, scope){
helpers.scope = scope;
return helpers[param];
}
}
});
也許fn.call($範圍)可以工作,但仍然不知道如何實現它雖然 –