2015-06-25 32 views
0

我想讓我的視圖只在獲取初始數據後才顯示,我試圖通過路由解析來完成此操作,但是我無法使其工作。我究竟做錯了什麼?此外,我的角度技能有點破舊,所以如果我的問題是愚蠢的,我會提前告知。

的application.js:

var Application = angular.module('ReporterApplication', ['ngRoute']); 

Application.config(['$routeProvider', '$interpolateProvider', 

    function($routeProvider, $interpolateProvider) { 

     $interpolateProvider.startSymbol('<%'); 
     $interpolateProvider.endSymbol('%>'); 

     $routeProvider 

      .when('/packing/scan.html', { 
       templateUrl: 'packing/scan.html', 
       controller: 'PackingScanController', 
       resolve: { 
        initData : Application.PackingScanInit() 
       } 
      }) 

      .when('/packing/stats.html', { 
       templateUrl: 'packing/stats.html', 
       controller: 'PackingStatisticsController' 
      }) 

      etc 

,這裏是我的Scan.js文件:

Application.PackingScanInit = function ($q,$timeout,$http) { 

    var serverData = ""; 

    $http.get('/packing/scan.action') 
     .success(function(data){ 
      serverData = data; 
     }) 
     .error(function(data){ 
      serverData = data; 
     }); 

    return serverData; 

} 

Application.controller('PackingScanController', ['initData', '$scope', '$http', function(initData, $scope, $http) { 

    var packer = this; 

    // Message log model 
    packer.messageLog = [{ 
     status : "", 
     message : null  
    }]; 

的文件都包含在這個順序。

回答

0

試試這個:

Application.PackingScanInit = function ($q,$timeout,$http) { 

    return $http.get('/packing/scan.action') 
     .success(function(data){ 
      return data; 
     }) 
     .error(function(data){ 
      return data; 
     }); 

} 

你也需要你的決心調整到這一點:

resolve: { 
       initData : Application.PackingScanInit 
      } 

下面是具體的工作例如:

(function() { 

    angular.module('app',['ngRoute']); 

    function TestCtrl($scope, initData) { 
    $scope.value = initData; 
    } 

    angular.module('app').config(function($routeProvider) { 
    $routeProvider.otherwise({ 
     template: '`<p>Dude {{value}}</p>`', 
     controller: TestCtrl, 
     resolve: { 
     initData: function($http) { 

      return $http.get('test.json') //change to test-e.json to test error case 
      .then(function(resp) { 
       return resp.data.value; //success response 
      }, function() { 
       return 'Not Found'; // error response 
      }); 

     } 
     } 
    }); 
    }); 

})(); 

http://plnkr.co/edit/SPR3jLshcpafrALr4qZN?p=preview

+0

仍然沒有骰子,它給了我這個錯誤 未知的提供:initDataProvider < - initData < - PackingScanController –

+0

hhmmm嘗試只是直接複製粘貼'''Application.PackingScanInit'''功能進入的決心。我想知道該功能是否在配置運行時沒有定義。 – rgaskill

+0

好吧,你說的對,這些腳本是按照這個順序加載的,所以我首先聲明應用程序的配置,然後是功能,然後纔是控制器。但仍然不能解決這個錯誤:/ –

0

服務是單身意味着初始化只有一個,但時間,但如果你只是從服務返回它將被稱爲一次,但如果你從服務返回一個函數,它將被反覆調用。見下面的示例工作。

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'); 
     } 
    }; 
}); 
相關問題