2016-09-18 77 views
-1

我有一個狀態在我的角度.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函數中找不到任何對這個對象內的$ 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"); 
      } 
     } 
    } 

,然後在你mainViewCtl你可以做

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

由於可讀性原因,我的帖子被簡單化了,如果我在用戶進入頁面/視圖時可以從服務中獲得價值,我會接受它。 –

+0

每次切換到狀態時都會重新創建控制器。所以 - 是的,如果你想要從外部讀取一個值,你甚至不需要解析塊。 Resolve block允許您在創建控制器之前根據需要更改服務值。 –

0

您可以將HTML NG-INIT屬性中的一個方法。此功能將在您進入視圖時調用。

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