2013-11-27 55 views
2

我正在傾斜Angular的路線。很簡單,只需設置模板屬性即可將視圖加載到ng-view。如何替換ng視圖中的部分部分?

假設我在視圖上有一個小部件。當用戶導航到/#/ changeWidget時,如何僅替換小部件內容?

它看起來像我,我只能用單NG視圖

main.html中

<div ng-app="payment"> 

    <div ng-view></div> 

</div> 

JS

var app = angular.module("payment",["ngRoute"]); 

function listController($scope) { 
} 

    app.config(function($routeProvider, $locationProvider){ 

     $routeProvider.when('/list', { 
      templateUrl: 'templates/list.html', 
      controller: listController 
     }). 
     when('/chagneWidget', { 
      templateUrl: 'templates/widget2.html', 
      controller: widget2Controller 
     }). 
     otherwise({ 
      redirectTo: '/list' 
     }); 

    }); 

所以基本上,當'/ changeWidget'被觸發,我只想替換一個從list.html

是否有可能與路由器或應該我只是做... ajax調用和操縱DOM?

回答

3

我不認爲這是容易可能的角度router - ,老實說是它相當大的限制。但嘿有這個非常好的和流行的模塊,它提供了這樣的可能性:ui-router。如果您沒有閱讀說明文件:

警告:UI-Router處於beta版前並處於活動狀態。因此,雖然這個圖書館經過了充分測試,但API可能會發生變化。不建議在需要保證穩定性的項目中使用它。

是否真的有必要通過更改路由來更新小部件?如果沒有,有很多選項可以在角度上進行。如果你真的必須改變路線,你可以使用這個黑客:

$scope.$on("$locationChangeStart", function (event, next, current) { 

    if (next == 'your_domanin/your_specific_url') { 
     setTimeout(function() { 
      $window.history.pushState("object or string", 
      "Title", '/your_specific_url')},20); 
     event.preventDefault(); 
     // ... update your view 
    } 
}); 
2

使用ngSwtich會出現什麼問題?

的ngSwitch指令用於有條件地交換基於示波器的表達上 模板DOM結構......然而, 作品,而不是下載模板 代碼(或者從加載它類似於ngInclude,該指令本身模板緩存),ngSwitch只需選擇一個嵌套元素,並根據哪個元素 與從評估表達式獲得的值匹配,使其可見。

http://docs.angularjs.org/api/ng.directive:ngSwitch

+0

謝謝喬恩!這是我在閱讀文檔時錯過的東西。我希望我可以選擇兩個答案。我猜...我應該選擇artur's,因爲他的答案是關於路由的...... – Moon

+0

FWIW,由artur描述的基於狀態的UI路由器正在被採用作爲角度的標準路由器,原始路由器被降級爲附加模塊,所以瞭解你的路由器:) –