首页 > 解决方案 > angularjs ui-router嵌套状态新控制器不起作用

问题描述

我被 ui-router 中的嵌套状态困住了。我正在渲染一个包含地区、国家和每个国家的人的页面

index.html 有三个区域作为链接,EMEA APAC 和 AMER

索引页的部分有:

<a ui-sref="territory({territory: 'amer'})">AMER</a>&nbsp;<a ui-sref="territory({territory: 'emea'})">EMEA</a>&nbsp;<a ui-sref="territory({territory: 'apac'})">APAC</a>

<ui-view></ui-view>

单击链接时,国家/地区由 $http.post 操作返回,并由 /views/countries.html 显示为:

<h1>This is countries</h1>
<br>
Teritory: {{region}}
<div ng-repeat='country in countries'>
    <a ui-sref=".support({country: '{{country}}'})">{{country}}</a ui-sref>
</div>

到目前为止,这是有效的!所以我在每个国家/地区都有一个 .support 链接。现在的问题是,当我单击链接时,状态被接受......因为它正在加载模板URL,但似乎没有加载在该状态下指定的控制器。angularjs代码:

$urlRouterProvider.otherwise('/home');
    $stateProvider
        .state('home', {
            url: '/home',
            templateUrl: 'views/home.html',
            controller: 'supportCtrl'
        })
        .state('territory', {
            url: '/territory/:territory',
            templateUrl: 'views/countries.html',
            controller: 'countryController'
        })
        .state('territory.support',{
            url: '/:country',
            templateUrl: 'views/supporter.html',
            controller: 'supportController'
        })
});

支持控制器正在编写一个 console.log 条目......但没有任何反应。控制器:

supportApp.controller('countryController',['$scope', 'supportService', '$location', '$stateParams', function($scope, supportService, $location, $stateParams){
    
    $scope.fromTerritory = $stateParams.territory;
    $scope.getCountries = function(){
        var countries = supportService.getCountries($scope.fromTerritory);
        countries.then(function(response){
            if(response.data.error){
                $scope.error = true;
                $scope.message = response.data.message;
            }
            else{
                console.log('response OK');
                $scope.region = $scope.fromTerritory;
                $scope.countries = response.data;
            }
        });
    }
    $scope.getCountries();

}]);

supportApp.controller('supportController',['$scope', 'supportService', '$location', '$stateParams', function($scope, supportService, $location, $stateParams){
    console.log('in the supportController');
    var test = function(){
        console.log('supportController country: '+$stateParams.country);
    }
    test();
}]);

我可能在这里做错了什么。目标是单击国家,然后显示属于该特定国家的人的姓名。

如果不清楚,我可以在需要的地方提供更多信息。但是现在看来嵌套状态(.territory.support)的控制器(supportController)没有运行/加载

谢谢你!

标签: javascriptphpangularjsangular-ui-router

解决方案


好的,我现在有我的答案......因为我没有<ui-view></ui-view>在 supporter.html 上使用控制器不是“需要”并且没有加载。添加 consol.log 后显示日志条目。


推荐阅读