2015-08-18 6 views
3

У меня возникли проблемы с получением контроллеров для выполнения моих маршрутов.Контроллер углового маршрута не работает

В принципе, я зарегистрировать свои маршруты следующим образом:

var App = angular.module('App', ['ngRoute', 'routesControllers']); 

App.config(['$routeProvider', 
function($routeProvider) { 
    $routeProvider. 
     when('/', { 
      template: " ", 
      controller: 'NewOrderCtrl' 
     }). 
     when('/:companyName/:orderNumber', { 
      template: " ", 
      controller: 'ViewOrderCtrl' 
     }). 
     otherwise({ 
      redirectTo: '/' 
     }); 
}]); 

Здесь я ничего не определяю в шаблоне, потому что я использую свои маршруты, чтобы стрелять Аякс GETs.

Моих контроллеров являются следующими:

var routesControllers = angular.module('routesControllers', []); 

routesControllers.controller('NewOrderCtrl', ['OrderManagerFactory', function(OrderManagerFactory) { 

    alert('NewOrderCtrl fired!'); 

    //create a new empty company and order 
    OrderManagerFactory.createNewCompany(); 
    OrderManagerFactory.createNewOrder(); 

}]); 

routesControllers.controller('ViewOrderCtrl', ['OrderManagerFactory', '$routeParams', function(OrderManagerFactory, $routeParams) { 

    alert('ViewOrderCtrl fired!'); 

    //Fire a bunch of ajax calls using the data from $routeParams 

}]); 

Я также поставил DIV для моего пустого взгляда:

<div ng-view ng-controller="ViewOrderCtrl"></div> 

И когда я посещаю #/tesla/x123x к примеру, я ничего не получаю. Предупреждение() в одном из контроллеров не выполняется ...

Может ли кто-нибудь помочь? Что мне не хватает?

+0

У вас есть ошибки на консоли? каков ваш порядок загрузки скриптов? (вы загружаете маршрут angularjs?) –

+0

Консоль пуста. Порядок загрузки сценариев выглядит следующим образом: angular.js, angular-route.js, app.js – Oli

ответ

1

Вместо этого вы можете использовать resolve, а не пытаться использовать controller ... в некотором смысле, это не контроллер, который у вас там есть.

resolve - {Object. =} - Дополнительная карта зависимостей, которые должны быть введены в контроллер. Если какая-либо из этих зависимостей является обещанием, маршрутизатор будет ждать, пока все они будут разрешены или один будет отклонен до того, как будет создан экземпляр контроллера. https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider

Так что-то вроде:

$routeProvider.when('/', { resolve: { init: 'NewOrderService' } }); 

и изменить контроллер на заводе или услуга:

routesControllers.service('NewOrderService', ['OrderManagerFactory', function(OrderManagerFactory) { 

    alert('NewOrderService fired!'); 

    //create a new empty company and order 
    OrderManagerFactory.createNewCompany(); 
    OrderManagerFactory.createNewOrder(); 

}]); 

Редактировать

Если маршрут имеет некоторые параметров, это может быть ssed через $routeParams.

Это не многоразовый шаблон, чтобы иметь заводскую/услугу зависит от $routeParams, поэтому обновления resolve свойства использовать функцию поможет:

Из документов снова:

Имейте в виде, что ngRoute.$routeParams все равно будут ссылаться на предыдущий маршрут в пределах этих функций разрешения. Используйте $route.current.params для доступа к новым параметрам маршрута, а не

+0

Как я могу передать данные на завод с помощью URL-адреса? URL-адрес формата «/: companyName /: orderNumber», и я хочу имя_компании и номер заказа. – Oli

+0

Добавлено редактирование ответа. –

+1

Спасибо!Итак, хотя это не было причиной моей проблемы (моя проблема заключается в том, что я привязываю атрибут ng-app к тегу вместо ), я по-прежнему отмечаю его как принятый ответ, потому что это ИМО лучший способ сделать что я пытался сделать. Ура! – Oli

Смежные вопросы