2013-12-12 23 views
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]; 
     } 
    } 
}); 

回答

2

我有類似的問題。由於嵌套的範圍問題,我最終沒有使用模態。然而,我越想越多,我認爲使用指令越多越好。然後給它一個transclude = true;這將允許您使用它的所有內容,併爲該指令提供Ctrl的範圍。我不知道這是否是最好的方式,但我很確定它會起作用。 http://docs.angularjs.org/guide/directive

+0

也許fn.call($範圍)可以工作,但仍然不知道如何實現它雖然 –

相關問題