如何从另一个控制器中检查AngularJS UI-Router状态?

时间:2016-11-17 06:49:50

标签: angularjs angular-ui-router

我正在使用Angular的UI-Router,如下所示在我的网络应用中进行网址路由,如下所示:

$stateProvider.state('myState1', {
    url: '/state1',
    templateUrl: 'state1.html',
    controller: 'MyState1Ctrl'
  });

$stateProvider.state('myState2', {
    url: '/state2',
    templateUrl: 'state2.html',
    controller: 'MyState2Ctrl'
  });

在两个模板文件state1.htmlstate2.html的每一个中,我都有导航栏指令:<myapp-navigation-bar></myapp-navigation-bar>。这是导航栏的控制器:

raptorApp.controller('NavigationCtrl', function($scope){
    var self = this;
    $scope.$watch(function() {return "something";}, function (objVal) {
        console.log('Hello from NavigationCtrl!');
    },true);
});

但我希望导航栏的行为与myState1myState2中的天气不同。如何在NavigationCtrl内检测到它处于哪种状态?

1 个答案:

答案 0 :(得分:1)

我们总是可以将任何内容放入$scopewatch中。甚至是$state服务及其current.name。像(只是草稿)

之类的东西
raptorApp.controller('NavigationCtrl', function($scope, $state){
    var self = this;
    $scope.state = $state;
    $scope.$watch("state.current.name", function (objVal) {
        console.log('current state name changed');
    },true);
});

注意:永远不要忘记在销毁

上删除此类手表

但是使用UI-Router ..有更好的方法。更好的方法:

  • 命名视图
  • 多个观点

因此,我们可以拥有一个父状态,其中包含一个名为 'myapp-navigation-bar' 的视图,并且可以由每个州填充...具有不同的实现。有关如何和示例

的详细信息,请参阅此处

Nested states or views for layout with leftbar in ui-router?

How do I load UI-router ui-view templates that are nested 3 states deep?