角度路线没有发射控制器

时间:2015-08-18 19:52:37

标签: javascript angularjs

我在获取执行路径的控制器时遇到了问题。

基本上,我按如下方式注册我的路线:

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: '/'
        });
}]);

在这里,我没有在模板中定义任何内容,因为我使用我的路由来激活ajax GET。

我的控制器如下:

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时,我什么都没得到。其中一个控制器中的alert()不执行...

有人可以帮忙吗?我错过了什么?

1 个答案:

答案 0 :(得分:1)

您可以改为使用resolve而不是尝试使用controller ......在某种程度上,它并不是您拥有的控制器。

  

resolve - {Object。=} - 应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。   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();

}]);

修改

如果路线有一些参数,可以通过$routeParams访问这些参数。

使工厂/服务依赖$routeParams不是可重用的模式,因此更新resolve属性以使用函数将有所帮助:

再次来自文档:

  

请注意,ngRoute.$routeParams仍会引用这些解析函数中的上一个路径。使用$route.current.params来访问新路由参数,而不是