2016-09-01 78 views
4

我遇到了這個問題,我無法弄清楚如何解決這個問題。我有這個組件:

(function() { 
    'use strict'; 

    // Usage: 
    // 
    // Creates: 
    // 

    myApp 
     .component('navbar', { 
      //template:'htmlTemplate', 
      templateUrl: 'app/components/navbar/navbar.partial.html', 
      controller: ControllerController, 
      bindings: { 
       progress: '<' 
      }, 
     }); 

    ControllerController.$inject = ['$scope','$rootScope','changeState']; 
    function ControllerController($scope,$rootScope,changeState) { 

     var $ctrl = this; 

     $scope.$on('state-changed',function(event,args){ 
      console.log(args); 
     }); 




     $ctrl.$onInit = function() { }; 
     $ctrl.$onChanges = function (changesObj) { }; 
     $ctrl.$onDestory = function() { }; 
    } 
})(); 

在$ transitions.onSuccess(ui-router 1.0 Beta)上觸發事件'狀態改變'。下面的代碼:

var myApp = angular.module('myApp', ['ui.router']); 

myApp.controller('appCtrl', ['$scope', '$state', 'formDataService', '$timeout', '$transitions','changeState','$transitions', 
     function ($scope, $state, formDataService, $timeout, $transitions,changeState,$transitions) { 

     changeState.go('1'); 
     $scope.stateByFar = 1; 

     $scope.currentState = function(){ 
      return $state.current.name; 
     }; 

     $scope.updateStateByFar = function(){ 
      if (parseInt($scope.currentState())>$scope.stateByFar) 
       $scope.stateByFar=parseInt($scope.currentState()); 
     }; 



      $transitions.onSuccess({to: '*'}, function(){ 

       $scope.updateStateByFar(); 
       console.log($scope.stateByFar); 
       $scope.$broadcast('state-changed',{currentState: $scope.currentState(), 
                stateByFar : $scope.stateByFar}); 

      } 
      ); 




    }]); 

[編輯] 廣播的實際工作。不能在第一個國家廣播。當主模塊運行時,第一條指令是:$ state.go('1');我無法檢測到這第一個state.go。進一步state.go被聆聽。

+0

你不是從riitscope廣播?對 ? – DMCISSOKHO

回答

1

我將指出四兩件事:

1)'*'是在匹配任何狀態下的水珠圖案根級別,但它不匹配子狀態。也使用雙星'**'來匹配子狀態。 ui路由器glob文檔分散且不太好,很抱歉。

更好的是,默認爲:條件已經匹配任何狀態,所以使用onSuccess({}, ...)

這是這裏https://ui-router.github.io/docs/latest/interfaces/transition.hookmatchcriteria.html

記錄所有屬性都是可選的。如果任何屬性被省略,它將被值替換爲true,並且總是匹配。

2)如果你在控制器中創建一個鉤子,當控制器作用域被銷燬時,你應該註銷該鉤子。 3)如果在初始化控制器之前(和onSuccess掛接寄存器之前)正在進行轉換,則不會捕獲初始轉換。您可以掛接到正在進行中的過渡承諾從$state.transition & & $state.transition.promise

4)傳統$stateChange*事件仍然可用,但你必須申請加入。見https://ui-router.github.io/docs/latest/modules/ng1_state_events.html

有關遷移至1.0的更多信息,請參閱本指南:https://ui-router.github.io/guide/ng1/migrate-to-1_0

+0

謝謝。它真的澄清我的疑惑。 –

2

我不確定你是否遇到類似於我的問題,在這種情況下,我希望我的發現能夠幫助你。我的問題的完整描述,我找到的解決方案是here

總之,我遇到一些問題,而使用$transitions,我發現,與1.0.0.beta1版本tofrom params不起作用。

所以,與其

$transitions.onSuccess({to: '*', form: '*'}, function(){}); 

我使用

$transitions.onSuccess({}, function(){ 
    if($state.current.name == 'myState') // do stuff 
}); 
+0

感謝您的快速回復,但看起來{{:'*'}不會影響我的路由。 –