javascript - 在 html 中声明 Controller 与父状态相同

标签 javascript html angularjs angular-ui-router

我正在使用 ui-router 并具有带有 View 的嵌套状态。我目前的 Controller 运行了两次,因为它是在 app.js 文件和 ng-controller 中声明的。我需要在 html 文件中设置 ng-controller ,因为我在嵌套状态下有动态 View ,每个 View 都有不同的 Controller 。

这是我的 app.js 文件

.state('index.region', {
    url: 'region',
    templateUrl: 'views/region.html',
    controller: 'RegionCtrl'
})
.state('index.region.detail', {
    url: '/:regionId',
    params: {
        detail: 'overview'
    },
    views: {
        'detail@index' : {
            templateUrl: function($stateParams) {
                if($stateParams.detail === 'info' || $stateParams.regionId) {
                    return 'views/regionInfo.html';
                } else if ($stateParams.detail === 'overview') {
                    return 'views/regionOverview.html';
                }
            }
        }
    },
})

views/regionOverview.html 的 HTML

<div ng-controller="RegionCtrl">

views/regionInfo.html的 HTML

<div ng-controller="RegionInfoCtrl">

最佳答案

在这种情况下,您不应该从 html 加载 Controller ,而应该从状态本身加载 Controller 。

我建议您使用 state 的 controllerProvider 选项来动态加载 Controller 。

.state('index.region', {
    url: 'region',
    templateUrl: 'views/region.html',
    controller: 'RegionCtrl'
})
.state('index.region.detail', {
    url: '/:regionId',
    params: {
        detail: 'overview'
    },
    views: {
        'detail@index' : {
            templateUrl: function($stateParams) {
                if($stateParams.detail === 'info' || $stateParams.regionId) {
                    return 'views/regionInfo.html';
                } else if ($stateParams.detail === 'overview') {
                    return 'views/regionOverview.html';
                }
            },
            controllerProvider: function($stateParams){
                 if($stateParams.detail === 'info' || $stateParams.regionId) {
                    return 'RegionInfoCtrl';
                } else if ($stateParams.detail === 'overview') {
                    return ''; //return nothing
                }
            }
        }
    },
})

Demo Plunkr

关于javascript - 在 html 中声明 Controller 与父状态相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35324885/

相关文章:

javascript - 将多个库注入(inject) Angular 时出错

javascript - 使用函数或类的 Appcelerator Alloy 项目

javascript - 使用带有元素 id 的 onkeyup 函数从 Html 获取值到 jquery?

Angularjs:使用 spyOn 模拟 location.path() 进行单元测试

javascript - 在 meteor 中单击按钮时显示动态卡的隐藏部分

javascript - 如何使用 JavaScript 在按钮点击时显示内容

javascript - 在 html5mode angularjs 中注销 url?

javascript - 如何在 javascript 中使用 "re-enable"特殊字符序列?

javascript - react 。如何取消订阅 React componentWillUnmount 中的事件处理程序?

javascript - 我如何在单个页面上使用多个 jquery 版本?