在带有视图(路由)的AngularJS中,为什么控制器只能继续执行?

时间:2016-01-21 12:55:24

标签: javascript angularjs ionic-framework angular-ui-router

我有一个带有视图的离子项目(使用AngularJS)。路由就像:

.state('menu.play', {
  url: '/play/:audioIndex',
  views: {
    'side-part': {
      templateUrl: 'templates/play.html',
      controller: 'playCtrl'
    }
  }
})

在控制器上,我得到了' audioIndex'参数并将其设置为$rootScope$scope并在控制台上显示

.controller('playCtrl', function($scope, $stateParams, $rootScope) {
    $rootScope.viewsAudioIndex = $stateParams.audioIndex;
    $scope.audioIndex = $stateParams.audioIndex;

    console.log("stateParams.audioIndex: " + $stateParams.audioIndex);
})

我从http://localhost:8100/#/menu/play/0开始。 我的下一个音频按钮就像:

<a href="#/menu/play/{{audioIndex + 1}}">Next</a>

我点击了三次,然后在我的控制台上

stateParams.audioIndex: 0
stateParams.audioIndex: 1
stateParams.audioIndex: 2
stateParams.audioIndex: 3

没关系,问题是我点击后退按钮;

<a href="#/menu/play/{{audioIndex- 1}}">Back</a>

控制台不打印任何内容,就像控制器没有被调用

我检查了chrome dev工具(AngularJS标签),当我返回时,$ rootScope不会改变。视图路由工作正常,没有问题。

回顾一下,如果我从menu/play/0开始,那么

  1. 点击下一步
  2. 点击下一步
  3. 点击下一步
  4. 点击返回
  5. 点击返回
  6. 点击返回
  7. 点击下一步
  8. 点击下一步
  9. 点击下一步
  10. 我上了控制台

    stateParams.audioIndex: 0
    stateParams.audioIndex: 1
    stateParams.audioIndex: 2
    stateParams.audioIndex: 3
    stateParams.audioIndex: 1
    stateParams.audioIndex: 2
    stateParams.audioIndex: 3
    

    知道为什么吗?我看到当我回去时,范围被销毁,但这并不能解释$rootScope没有被更新。

2 个答案:

答案 0 :(得分:0)

通常必须使用ui-sref完成角度路由。 Haven未对您的案例进行过测试,但您仍需要更改链接以避免其他错误:

<a ui-sref="menu.play({audioIndex: {{audioIndex + 1}}})">Next</a>
<a ui-sref="menu.play({audioIndex: {{audioIndex - 1}}})">Back</a>

答案 1 :(得分:0)

正如Radim说我必须禁用缓存:

var currentDate = new Date();
var dayOfWeek = currentDate.getDay();