【问题标题】:Angular UI-Router not showing html content, but directing to the right path. No errors, but ui-view not workingAngular UI-Router 不显示 html 内容,但指向正确的路径。没有错误,但 ui-view 不起作用
【发布时间】:2015-09-05 02:30:43
【问题描述】:

我正在为 Angular 应用程序使用 UI-Router。我似乎找不到我做错了什么。我也没有收到任何错误,这让我很难调试。也遵循了文档,我正在遵循他们的步骤。当我不将它嵌套在子视图中时,我的控制器功能正在工作。有人可以指导我做错什么吗?提前致谢!

APP.JS

'use strict';

var app = angular.module('americasTopStatesApp', ['ui.router', 'ngAutocomplete']);

app.run(function($state, $rootScope) {
    $rootScope.$state = $state;
});

app.config(function($stateProvider, $urlRouterProvider) {

    $urlRouterProvider
    .otherwise('/home');

    $stateProvider
    //HOME
    .state('home', {
        url: '/home',
        templateUrl: './app/views/homeTmpl.html',
        controller: 'homeCtrl'
    })
    //RANKINGS
    .state("rankings", {
        url: "/rankings",
        templateUrl: './app/views/rankingsTmpl.html',
        controller: 'rankingsCtrl'
    })  
        // RANKINGS CHILDREN
        .state('rankings.data', {
            url: '/data',
            templateUrl: './app/views/rankingsDataTmpl.html',
            controller: 'rankingsCtrl',
            parent: 'rankings'
        })
});

CONTROLLER排名Ctrl

'use strict';

app.controller('rankingsCtrl', function($scope, rankingsService) { //Start Controller

    // ***********************************************
    // *************** GET LATEST DATA ***************
    // ***********************************************  
    $scope.getAllStateRankings = function() {
        rankingsService.getStateRankingsData().then(function(data) {
            $scope.showRankings = true;

            // console.log("Contoller Data", data);
            $scope.states = data;
        });
    };
    $scope.showRankings = false;
    $scope.getAllStateRankings();

}); //End Controller

父视图排名Tmpl.html

<div class="rankings-heading">
    <h1>America's Top States</h1>
    <button ng-click="getAllStateRankings()">
        <a ui-sref="rankings.data" id="data" class="btn">Data</a>
    </button>
</div>

</div ui-view></div>

子视图(嵌套 ui-view)rankingsDataTmpl.html

<div class="rankings-container" ng-show="showRankings">

    <div class="panel panel-primary" ng-repeat='state in states'>
        <div class="panel-heading">
            <h3 class="panel-title">{{state.state}}</h3>
        </div>
        <div class="panel-body">
            Economy: {{state.economy}}<br>
            Capital Access: {{state.accessToCapital}}<br>
            Business: {{state.business}}<br>
            Cost of living: {{state.costOfLiving}}<br>
        </div>
    </div>
</div>

屏幕截图

【问题讨论】:

  • @m59 我也试过了,但是也没用。
  • @m59 不走运!我也去掉了我所有的 ng-show 和 ng-hide 逻辑。
  • 当 templateUrl,FWIW 中有错字时,我会遇到这种静默失败。
  • 感谢@m59 的解决方案。弄清楚错误是什么。我将
    ui-view>
    替换为 并且它起作用了。

标签: javascript angularjs angularjs-directive angularjs-scope angular-ui-router


【解决方案1】:

a working plunker

在这种情况下,当我们有父子和angular的UI-Router时,我们不应该使用基于的解决方案

父母和孩子有相同的控制器。 // WRONG approach

因为他们实际上确实有相同的 type。那种'rankingsCtrl'在运行时的instance是不同的。

我们需要的是:

How do I share $scope data between states in angularjs ui-router?

scope inheritance,由引用对象驱动,例如$scope.Model = {}

有调节控制器:

.controller('rankingsCtrl', ['$scope', function($scope) {

    $scope.Model = {};
    $scope.getAllStateRankings = function() {
      //rankingsService.getStateRankingsData().then(function(data) {
        $scope.Model.showRankings = true;

        // console.log("Contoller Data", data);
        $scope.Model.states = data;
      //});
    };
    $scope.Model.showRankings = false;
    $scope.getAllStateRankings();

}])

最后,子视图可以有不同的控制器,并有自己的逻辑:

.state("rankings", {
  url: "/rankings",
  templateUrl: 'app/views/rankingsTmpl.html',
  controller: 'rankingsCtrl'
})
// RANKINGS CHILDREN
.state('rankings.data', {
  url: '/data',
  templateUrl: 'app/views/rankingsDataTmpl.html',
  controller: 'rankingsChildCtrl',
  parent: 'rankings'
})

另外,父视图应该有固定的div:

// wrong
</div ui-view></div>
// starting tag
<div ui-view></div>

查看it here in action

【讨论】:

  • 很高兴看到这一点,真的!先生,享受强大的 UI-Router ;)
  • 感谢您让我了解 ui-router 中嵌套视图中的继承范围。我正在阅读大量内容,但仍然略微偏离了轨道。我创建了您要求我创建的内容,但我仍然看不到任何数据。这是我的 plunkr-plnkr.co/edit/sNx2otsOdAx1XyxGuTmx?p=catalogue
  • 不确定我能为您做什么... ;( 我的 plunker 不适合您吗?如果您知道我可以如何提供帮助...请告诉我。如果我能,我至少会尽力帮助
  • 你的工作正常,但是当我在我的代码上实现它时,它不起作用。 @radimkohler- 创建了一个 plunkr 供您查看我的代码。我以为我知道 ui-router,但现在我真的必须更深入地研究嵌套视图和继承范围。
  • 哎呀,我之前错过了那个 plunker 链接...给我几秒钟的时间来检查我是否可以提供帮助...
猜你喜欢
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多