2014-04-03 47 views
0

在屬於某個路由的模板上我想單擊調用範圍中的方法的鏈接或按鈕,並從那裏轉換到新路線並在模板上尋找新路線的元素。基本上是這樣的:

app.controller('SomeController', function SomeController($scope, $location) { 
     $scope.goToOverview = function (showModal) { 
      $location.path("overview/basic"); 

      if(showModal){ 
       $('#basicModal').modal('toggle'); 
      } 
     }; 
    }); 

的問題是,當我到了jQuery選擇,對於「概述/基本」路線的模板還沒有被加載,以便該元素是找不到的。

這怎麼解決?

謝謝。

+0

'>這可怎麼解決'也許通過定義'概述另一個控制器/基本'並將'showModal'作爲狀態參數傳入? – fardjad

+0

嘗試放入運行塊$ scope。$ on('$ stateChangeSuccess',function(event,toState){}比你檢查likeState.name做廣播或類似的東西 – Whisher

+0

@fardjad這就是我們試圖避免的,不要在網址上放太多東西 –

回答

0

由於requestedhere是從一個控制器廣播的事件,而在另一個控制器捕獲它的一個例子:

<div ng-app="MyApp"> 
    <div ng-controller="OneCtrl"> 
     <form> 
      <input type="text" ng-model="msg"></input> 
      <input type="submit" ng-click="send(msg)" value="Broadcast"></input> 
     </form> 
    </div> 
    <div ng-controller="TwoCtrl"> 
     <p>Message from OneCtrl: {{ msg }}</p> 
    </div> 
</div> 

<script type="text/javascript"> 
var app = angular.module("MyApp", []); 

app.controller('OneCtrl', function ($scope, $rootScope) { 
    $scope.send = function (msg) { 
     $rootScope.$broadcast('one_msg', { 
      msg: msg 
     }); 
    }; 
}); 

app.controller('TwoCtrl', function ($scope) { 
    $scope.$on('one_msg', function (event, data) { 
     $scope.msg = data.msg; 
    }); 
}); 
</script> 
+0

實際上,當我使用$ emit時,控制器之間的通信起作用了$ broadcast,但它仍然沒有解決原始問題,即通過執行$('#basicModal')。modal('toggle')來顯示模式窗口。該模板仍然沒有加載,所以jQuery返回和空結果。 –