AngularJS在状态onEnter函数内访问控制器$ scope

时间:2016-09-18 10:36:13

标签: javascript angularjs angularjs-scope

我在angular .config $ stateProvider中有一个状态,我希望onEnter方法可以访问状态的控制器$ scope。

我的州声明如下:

c_my_string constant char := 'abc';

控制器看起来像这样:

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

我希望onEnterPanda功能看起来像这样

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

我无法在onEnterPanda函数中找到对此对象内部$ scope的引用。

我也知道$ scop可能是可以接受的:

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

但这不是正确答案。

2 个答案:

答案 0 :(得分:0)

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

  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();
})

答案 1 :(得分:0)

您可以在HTML ng-init 属性中放置方法。进入视图时将调用此函数。

例如

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