簡體   English   中英

AngularJS - routeProvider解析調用服務方法

[英]AngularJS - routeProvider resolve calling a service method

我創建了一個檢查用戶登錄狀態的服務(如果令牌存在則記錄用戶,否則重定向到登錄頁面)。

最初我通過routeProvider解析調用了這個服務 - 這個工作完美一次,但由於Angularjs服務是單例,因此連續調用不會運行測試。

然后我嘗試將測試移動到返回對象中的方法中,但是我似乎無法讓routeProvider解析為調用服務的特定方法(這在某種程度上是有意義的)。

問題是,如何確保每次加載路線時都執行我的測試?

在egghead視頻系列( http://www.egghead.io/video/rbqRJQZBF3Q )中,他使用分配給控制器的功能,但這似乎不是生產應用程序的正確解決方案(我不想分配)一個特定控制器的函數,我相信Angularjs依賴注入將不起作用)。

服務是單件意味着只有一個但只有時間但是如果你只是從服務返回它將被調用一次,但如果你從服務返回一個函數,它將被一次又一次地調用。見下面的樣本工作

var app = angular.module('ajay.singhApp', [])
  .config(['$routeProvider', function($routeProvider) {
    $routeProvider
      .when('/view1', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl',
        resolve: {
            myVar: function (repoService) {
                return repoService.getItems().then(function (response) {
                    return response.data;
                });
            }
        }
      })
        .when('/view2', {
            templateUrl: 'views/main.html',
            controller: 'MainCtrl'
        })
      .otherwise({
        redirectTo: '/view1'
      });
  }]);


app.factory('repoService', function ($http) {
    return {
        getItems: function () {
            return $http.get('TextFile.txt');
        }
    };
});

添加到@ Ajay的響應,您可以使用字符串而不是標准屬性名稱,這將有助於縮小:

resolve: {
    'myVar': function (repoService) {
        return repoService.getItems().then(function (response) {
            return response.data;
        });
    }
}

暫無
暫無

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

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