首頁 >php教程 >PHP开发 >Angular頁間切換及傳值的4種方法

Angular頁間切換及傳值的4種方法

高洛峰
高洛峰原創
2016-12-07 15:46:171476瀏覽

本文實例為大家分享了Angular JS頁麵切換及傳值的方法,供大家參考,具體內容如下Angular JS頁邊切換及傳值

1. 基於ui-router的頁面跳轉傳參
(1 ) 在AngularJS的app.js中用ui-router定義路由,例如現在有兩個頁面,一個頁面(producers.html)放置了多個producers,點擊其中一個目標,頁面跳到對應的producer頁,同時將producerId這個參數傳過去。

state('producers', {
 url: '/producers',
 templateUrl: 'views/producers.html',
 controller: 'ProducersCtrl'
})
.state('producer', {
 url: '/producer/:producerId',
 templateUrl: 'views/producer.html',
 controller: 'ProducerCtrl'
})

   


(2) 在producers.html中,定義點擊事件,例如ng-click="toProducer(producerId)",在ProducersCtrl值.go介面):

.controller('ProducersCtrl', function ($scope, $state) {
 $scope.toProducer = function (producerId) {
  $state.go('producer', {producerId: producerId});
 };
});

   


(3) 在ProducerCtrl中,透過ui-router的$stateParams取得參數producerId,譬如:

轉傳參

舉例:你有N個頁面,每個頁面都需要用戶填選信息,最終引導用戶至尾頁提交,同時後一個頁面要顯示前面所有頁面填寫的信息。這時候用factory傳參是比較合理的選擇(下面的程式碼是簡化版,依需求可以不同訂製):

.controller('ProducerCtrl', function ($scope, $state, $stateParams) {
 var producerId = $stateParams.producerId;
});

   


3. 基於factory和$rootScope.$broadcast()的傳參

(1) 舉例:在一個單頁中定義了nested views,你希望讓所有子作用域都監聽到某個參數的變化,並且作出相應動作。例如一個地圖應用,某個$state中定義元素input,輸入地址後,地圖要定位,同時另一個狀態下的列表要顯示出該位置週邊商舖的信息,此時多個$scope都在監聽地址變化。
PS: $rootScope.$broadcast()可以非常方便的設定全域事件,並讓所有子作用域都監聽到。

.factory('myFactory', function () {
 //定义factory返回对象
 var myServices = {};
 //定义参数对象
 var myObject = {};
  
 /**
  * 定义传递数据的set函数
  * @param {type} xxx
  * @returns {*}
  * @private
  */
 var _set = function (data) {
  myObject = data; 
 };
 
 /**
  * 定义获取数据的get函数
  * @param {type} xxx
  * @returns {*}
  * @private
  */
 var _get = function () {
  return myObject;
 };
 
 // Public APIs
 myServices.set = _set;
 myServices.get = _get;
  
 // 在controller中通过调set()和get()方法可实现提交或获取参数的功能
 return myServices;
  
});

   


(2) 在取得位址的controller中:

.factory('addressFactory', ['$rootScope', function ($rootScope) {
 // 定义所要返回的地址对象
 var address = {};
  
 // 定义components数组,数组包括街道,城市,国家等
 address.components = [];
 
 // 定义更新地址函数,通过$rootScope.$broadcast()设置全局事件'AddressUpdated'
 // 所有子作用域都能监听到该事件
 address.updateAddress = function (value) {
 this.components = value.slice();
 $rootScope.$broadcast('AddressUpdated');
 };
  
 // 返回地址对象
 return address;
}]);

   


(3) 在監聽

4. 基於localStorage或sessionStorage的頁面跳轉傳參

注意事項:透過LS或SS傳參,一定要監聽變量,否則參數改變時,取得變數的一端不會更新。 AngularJS有一些現成的WebStorage dependency可以使用,譬如gsklee/ngStorage · GitHub,grevory/angular-local-storage · GitHub。以下使用ngStorage來簡述傳參過程:

(1) 上傳參數到localStorage - Controller A

// 动态获取地址,接口方法省略
var component = {
 addressLongName: xxxx,
 addressShortName: xxxx,
 cityLongName: xxxx,
 cityShortName: xxxx  
};
 
// 定义地址数组
$scope.components = [];
 
$scope.$watch('components', function () {
 // 将component对象推入$scope.components数组
 components.push(component);
 // 更新addressFactory中的components
 addressFactory.updateAddress(components);
});

   


(2) 中聽鈴就是Angular頁間切換及傳值的4種方法的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn