2016-09-18 15 views
-1

角度のある.config $ stateProviderの中に状態があり、onEnterメソッドが状態のコントローラ$ scopeにアクセスできるようにします。

私の状態は次のように宣言されています:

.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関数でこのオブジェクトの中の$ scopeへの参照を見つけることができませんでした。

また、私は$のSCOPのようなものでacceciblyかもしれません知っている:

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

しかし、それは正しい答えのように感じることはありません。

+0

は、私はあなたが正しくコントローラスコープを使用していないと思います。あなたが本当に望むのは、他のコントローラやサービスからアクセス可能なシングルトンオブジェクトであるサービスを作成し、その状態定義でサービスを解決することです。 –

答えて

0

私はあなたが何をしようとしているのか明確ではありません。しかし、正しく理解していれば、いくつかの条件に基づいてコントローラの設定を変更したいと思っています。最も簡単な方法は、そのような条件を取得/設定する可能性を提供するサービスを使用することです。

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

、その後、あなたの中には、あなたがあなたがHTML NG-INIT属性の中にメソッドを配置することができます

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

私の投稿は可読性の理由から簡素化されています。ユーザーがページ/ビューに入るときにサービスから価値を得ることができれば、私はそれを受け入れます。 –

+0

コントローラは、状態に切り替えるたびに再作成されます。だから、あなたが望むのは、外部から値を読み取るだけであれば、解決ブロックは必要ない。 Resolveブロックを使用すると、必要に応じてコントローラを作成する直前にサービス値を変更できます。 –

0

を行うことができますmainViewCtl。この関数は、ビューを入力するときに呼び出されます。

例えば

<ion-content ng-controller="pandaCtrl" ng-init="PandaSayHi()">...</ion-content> 
関連する問題