javascript - Angular 路线不触发 Controller

标签 javascript angularjs

我在获取要执行的路由的 Controller 时遇到问题。

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

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。

我的 Controller 如下:

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

}]);

我还为空 View 放置了一个 div:

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

例如,当我访问 #/tesla/x123x 时,我什么也得不到。任一 Controller 中的 alert() 不执行...

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

最佳答案

您可以改用 resolve 而不是尝试使用 controller ...在某种程度上,它并不是您真正拥有的 Controller 。

resolve - {Object.=} - An optional map of dependencies which should be injected into the controller. If any of these dependencies are promises, the router will wait for them all to be resolved or one to be rejected before the controller is instantiated. https://docs.angularjs.org/api/ngRoute/provider/$routeProvider

所以像这样:

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

并将 Controller 更改为工厂或服务:

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

  alert('NewOrderService fired!');

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

}]);

编辑

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

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

再次来自文档:

Be aware that ngRoute.$routeParams will still refer to the previous route within these resolve functions. Use $route.current.params to access the new route parameters, instead

关于javascript - Angular 路线不触发 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32081472/

相关文章:

javascript - 如何使用 ngAnimate 在 CSS 类之间制作动画?

javascript - Angular2 的 NgbModule ng-bootstrap 不起作用

javascript - 如何使用来自 import.io 的数据创建 Web 应用程序

javascript - 在 D3 v5 中使用 d3.csv 动态加载数据

Javascript 正则表达式多重匹配

javascript - 解决 AngularJS 上的摘要溢出问题

angularjs - Angular 表单验证 - 最小元素不能大于最大元素

angularjs - Angular - 在 ngInclude 中调用时 ngModel 不更新

javascript - 切换 CSS 类对元素没有影响

javascript - 如何从 angularjs/javascript 中特定位置的数组中删除元素