不能使用带有 ui-router AngularJS 的视图使用不同的控制器

Posted

技术标签:

【中文标题】不能使用带有 ui-router AngularJS 的视图使用不同的控制器【英文标题】:cannot use a different controller with a view with ui-router AngularJS 【发布时间】:2015-08-03 19:09:59 【问题描述】:

我正在使用 ui-router 来路由我的 Angular 应用程序。我有以下路线:

'use strict';

//Setting up route
angular.module('admins').config(['$stateProvider', 
    function($stateProvider) 
        // Admins state routing
        $stateProvider.
        state('admin_home', 
            url: '/admin',
            templateUrl: 'modules/admins/views/list-admins.client.view.html'
        ).
        state('adduser', 
            url: '/admin/create',
            templateUrl: 'modules/admins/views/create-admin.client.view.html', 
        ).
        state('viewAdmin', 
            url: '/admins/:adminId',
            templateUrl: 'modules/admins/views/view-admin.client.view.html'
        ).
        state('editAdmin', 
            url: '/admins/:adminId/edit',
            templateUrl: 'modules/admins/views/edit-admin.client.view.html'
        );
    
]);

这是在我的“管理”模块中,它有自己的控制器 (AdminsController)。

但是,我希望能够从这里创建一个新用户,执行此操作的控制器称为“AuthenticationController”,位于结构的其他位置。

据我所知,我应该可以这样写:

state('adduser', 
                url: '/admin/create',
                templateUrl: 'modules/admins/views/create-admin.client.view.html',
                controller:'AuthenticationController'

            )

它应该可以工作。

但是 - 我不断被重定向回索引页面。

我怀疑这可能是因为我使用的是 HTML5 并且在我的配置中也有这个:

// use HTML 5
         $locationProvider.html5Mode(true).hashPrefix('!');
            //Sets the HTTP header type for the redirects
           $httpProvider.defaults.headers.common = 
            'Accept': 'application/json', 
            'Content-Type': 'application/json'

谁能帮忙?

【问题讨论】:

假设您尝试直接加载/admin/create,您是否为 HTML5 模式设置了必要的服务器端 URL 重写?见github.com/angular-ui/ui-router/wiki/… 【参考方案1】:

你应该添加:

$urlRouterProvider.otherwise("/home");

然后在你的状态函数中(不是在你的视图文件中)声明你的控制器:

 state('viewAdmin', 
        url: '/admins/:adminId',
        controller : AdminsController,
        templateUrl: 'modules/admins/views/view-admin.client.view.html'
 )

如果不起作用,请尝试删除:

 $locationProvider.html5Mode(true).hashPrefix('!');
            //Sets the HTTP header type for the redirects
 $httpProvider.defaults.headers.common = 
     'Accept': 'application/json', 
     'Content-Type': 'application/json'

让我知道;)

【讨论】:

以上是关于不能使用带有 ui-router AngularJS 的视图使用不同的控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用干净的字符串 url,而不是使用带有 ui-router 的 mongo 对象 id 的 url

带有 ui-router 的 angular-material 中每个选项卡的单独控制器

带有 ui-router 的 CSS 滑动视图

带有angular1.5组件meteor和ui-router的动态标题

Angular UI-Router,父 ui-view 渲染,但带有模板的子视图不渲染

ui-router:中间模板