javascript - angular ui router - 必须点击两次才能按预期更新 View (带演示)

标签 javascript angularjs angular-ui angular-ui-router

我是 Angular 的新手,刚刚开始掌握 AngularUI 路由器框架。我有一个 html 页面,其中包含一个问题列表(每个问题都需要自己的 url)和一个结果页面。

我创建了一个快速精简的 plunker(包含所有文件)来演示这个问题:

http://plnkr.co/edit/QErnkddmWB0JgendbOiV?p=preview

对于 SO 引用:

应用程序.js

angular.module('foo', ['ui.router'])

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

    $urlRouterProvider.otherwise('/q1');

    $stateProvider

    .state('question', {
        url: '/:questionID',
        templateUrl: 'questions.html',
        controller: 'questionsCtrl'
    })

    .state('results', {
        url: '/results',
        templateUrl: 'results.html'
    })

})

.controller('questionsCtrl', function($scope, $stateParams) {

    $scope.questionID = $stateParams.questionID;
    $scope.scotches = [
        {
            name: 'Macallan 12',
            price: 50
        },
        {
            name: 'Chivas Regal Royal Salute',
            price: 10000
        }
    ];

});

基本上出于某些未知原因(对我而言)我必须点击“结果”链接两次才能出现在我的眼前,应该在第一次点击时出现。

有人知道为什么会这样吗?

A.

最佳答案

我们应该做的是反转状态定义:

.state('results', {
    url: '/results',
    templateUrl: 'results.html'
})
.state('question', {
    url: '/:questionID',
    templateUrl: 'questions.html',
    controller: 'questionsCtrl'
})

为什么?

because the question state definition is covering also the /results as a param /:questionID

但总的来说,这仍然令人困惑,所以我会更多地区分 url,例如使用 /question 关键字

.state('results', {
    url: '/results',
})
.state('question', {
    url: '/question/:questionID',
    ...
})

关于javascript - angular ui router - 必须点击两次才能按预期更新 View (带演示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25548798/

相关文章:

javascript - 处理 Safari/Chrome 上的取消按钮以在 App Store 弹出窗口中打开

angularjs - Angular UI 网格 : bootstrap dropdown in cell

javascript - Meteor 的 template.rendered 在页面实际渲染之前调用

javascript - 使用 UI 路由器和 token 在 AngularJS 中重定向

javascript - 复选框在 Accordion 的 ng-repeat 中被禁用

javascript - 在服务中使用服务 Angularjs

Angularjs - 在 Controller 范围内使用 orderby 过滤器

javascript - 使用 Selenium 捕获网络 XHR 日志(带参数的请求/响应)

javascript - 当应用多个过滤器时,AngularJS 从单个过滤器获取过滤列表计数

javascript - 使用背景 :true? 时如何在 MithrilJS 中使用 m.request 的值