本文實例為大家分享了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; });
(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; });
.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; }]);
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中文網(m.sbmmt.com)!