AngularJS在state onEnter函数中访问控制器的$scope



我在我的angular .config $stateProvider中有一个状态,我希望onEnter方法能够访问该状态的控制器$作用域。

我的状态声明如下:

.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider
  .state('panda1', {
    url: '/panda/',
    templateUrl: 'templates/panda.html',
    controller: 'pandaCtrl',
    onEnter: onEnterPanda
  })
  .state(...) //bunch of other states
  .state(...)
}

控制器看起来像这样:

.controller('panda1IntroCtrl',function($scope) {
   $scope.name = "pandaboy1";
})

我希望onEnterPanda函数看起来像这样

function onEnterPanda() {
  var scope = this.getController().get$Scope(); //would be nice
  console.log(scope.name); //pandaboy1
  scope.name = 'pandaboy2';
  console.log(scope.name); //pandaboy2
}

我在onEnterPanda函数的this对象中找不到任何对$作用域的引用。

我也知道$作用域可能是可以接受的,比如:

angular.element(document.getElementById('yourElementId')).scope();

但这感觉不像是正确的答案。

我不清楚你到底想做什么。但是,如果我理解正确的话,你需要根据一些条件来改变控制器的设置。最简单的方法是使用一些能够提供获取/设置这些条件的服务。

  state('home', {
        templateUrl: 'partials/main.html',
        controller:'panda1IntroCtrl',
        ....
        },
        resolve:{
            info:'infoSvc',
            loadProfile:function(info){
                return info.setMessage("name 2");
            }
        }
    }

然后在mainViewCtl中你可以输入

.controller('panda1IntroCtrl',[ '$scope','infoSvc', function($scope, info) {
  $scope.name = info.getMessage();
})

你可以在HTML ng-init属性中放置一个方法。这个函数将在你进入视图时被调用。

<ion-content ng-controller="pandaCtrl" ng-init="PandaSayHi()">...</ion-content>

最新更新