簡體   English   中英

UI-Router的resolve函數參數如何解析?

[英]How are UI-Router's resolve function arguments resolved?

我顯然錯過了UI-Router和/或angular的文檔中的某些內容,因此,盡管我聽起來很愚蠢,但這是:

http://angular-ui.github.io/ui-router/site/#/api/ui.router.state。$ stateProvider中,我們有一個示例resolve函數:

resolve: {
    myResolve1:
      function($http, $stateParams) {
        return $http.get("/api/foos/"+$stateParams.fooID);
      }
    }

我知道它的返回值將以名稱“ myResolve1”注入到控制器中。

我不太清楚函數參數“ $ http”“ $ stateParams”的值來自何處 那么,調用者在哪里找到要提供給該函數的值?

這是一個好點,例如此處討論的那樣

AngularJS UI路由器抽象狀態與解決

我們應該使用面向IoC的符號

resolve: {
    dataParent: ['$stateParams', 'ProfileService', function ($stateParams, ProfileService) {
        var username = $stateParams.username;
        return ProfileService.getProfile(username);
    }]
}

最大的好處是...即使縮小也能使用。 但實際上,現在已經非常清楚地說明了這一點:

有一個帶有所有必需依賴項名稱的數組-解析函數作為最后一個參數

您可以將通常會注入到控制器中的所有內容注入到包含其他解析的解析函數中。 您需要注意這一點,因為如果您要鏈接解析,則狀態完全導航將花費更長的時間,因此會使視圖變慢。 鏈接解析的示例如下所示。

resolve: {
    loggedIn: function(auth){ return  auth.requireLoggedIn()},
    user: function(loggedIn, auth){return auth.resolveUser()}
}

auth是我的角度應用程序中的一項服務,如您所見,loginIn是需要先解析的解決方案,然后才能用於加載您的用戶。 然后,您可以將它們都注入到控制器中。

您可以在其中放置任何Angular服務,工廠,過濾器或解決方案。.我敢肯定,我也缺少可以添加的其他一些核心內容,但這通常是我要注入解決方案的內容。 因此,要回答您的問題,它們僅來自您的Angular應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM