Почему я не могу использовать службу $ http в разрешении маршрута?

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      
    }];

файлы включены в этот порядок.

Теги:

2 ответа

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');
        }
    };
});
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
    хммм, попробуйте просто скопировать вставку функции Application.PackingScanInit непосредственно в разрешение. Мне интересно, если функция не определена во время запуска конфигурации.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню