2014-02-26 45 views
8

在我的應用程序後,我發現,用戶未登錄我想開一個模態對話框:

.when('/showtask/:id', {templateUrl: 'Home/Template/showtask', resolve: ShowTaskCtrl.resolve, access: { allowAnonymous: false }, 
      resolve: { 
     userAuthenticated: ["$http", "$q", function ($http, $q) { 
      var deferred = $q.defer(); 
      $http.get('/api/Authentication/UserAuthenticated').then(function (data) { 

       if (data.data != "null") { 
        deferred.resolve(data.data); 
       } 
       else { 

        var modalInstance = { 
         templateUrl: 'Home/Template/loginfailed', 
         controller: 'ModalInstanceCtrl', 
         modalpart: ['modalpart', function (modalpart) { 
          return modalInstance; 
          }] 
        }; 
        $modal.open(modalInstance); 

        deferred.reject(); 

       } 
      }); 
      return deferred.promise; 

     }] 

    } 

由於它是在路線的變化發生我必須注入一個實例內modalpart和檢索在控制器中。

var ModalInstanceCtrl = WorkerApp.controller('ModalInstanceCtrl', ["$scope", "modalpart", function ($scope, modalpart) { 

但我不斷收到此錯誤:

Unknown provider: modalpartProvider <- modalpart

我怎樣才能解決這個問題?

P.S.我正在查看的原始代碼是這裏:http://angular-ui.github.io/bootstrap/(在模式下)

回答

8

我從來沒有在路線變化裏面使用$modal服務,所以不知道如何工作。然而,僅僅看看你的$modal代碼看起來是錯誤的。正確的方法應該是:

var modalOptions = { 
    templateUrl: 'Home/Template/loginfailed', 
    controller: 'ModalInstanceCtrl' 
}; 
$modal.open(modalOptions); 

然後你的控制器定義:

WorkerApp.controller('ModalInstanceCtrl', 
    ["$scope", "$modalInstance", function ($scope, $modalInstance) { 
    // Do your stuff 
    }]); 

$modal服務會自動處理的$modalInstance注入到控制器,按照該documentation

+2

謝謝你的幫助,但我仍然得到錯誤:[$ injector:unpr]未知的提供者:$ modalInstanceProvider < - $ modalInstance ...有沒有其他的方法來實現我想要的? – Timsen

+0

但我真的不明白它,如果我運行console.log($ modalInstance)它返回一個對象... – Timsen

+0

我建議你創建一個最小的jsfiddle/plunker顯示錯誤。很確定它會得到修復。 – Beyers

8

有一段時間也有這個問題。雖然您沒有發佈您的HTML,但這是我的問題所在。確保你沒有在你的DOM中命名控制器,這已經在$ modal.open()中爲你處理了。

+0

謝謝..那對我有用.. – philipfwilson

2

我有同樣的問題,我發現我註冊的控制器運行兩次! 感謝@compguy,我刪除了模板中的控制器名稱。 我成功了!