Angular頁面傳參有多種辦法,根據不同用例,我舉5種最常見的(請在網頁版知乎瀏覽答案):
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中,定義頁面跳轉函數 (使用ui-router的$state.Go接口):
.controller('ProducersCtrl', function ($scope, $state) { $scope.toProducer = function (producerId) { $state.go('producer', {producerId: producerId}); };});(3) 在ProducerCtrl中,通過ui-router的$stateParams獲取參數producerId,譬如:
.controller('ProducerCtrl', function ($scope, $state, $stateParams) { var producerId = $stateParams.producerId;});2. 基于factory的頁面跳轉傳參
舉例:你有N個頁面,每個頁面都需要用戶填選信息,最終引導用戶至尾頁提交,同時后一個頁面要顯示前面所有頁面填寫的信息。這個時候用factory傳參是比較合理的選擇(下面的代碼是一個簡化版,根據需求可以不同定制):
.factory('myFactory', function () { //定義參數對象 var myObject = {}; /** * 定義傳遞數據的setter函數 * @param {type} xxx * @returns {*} * @private */ var _setter = function (data) { myObject = data; }; /** * 定義獲取數據的getter函數 * @param {type} xxx * @returns {*} * @private */ var _getter = function () { return myObject; }; // Public APIs // 在controller中通過調setter()和getter()方法可實現提交或獲取參數的功能 return { setter: _setter, getter: _getter };});3. 基于factory和rootScope.broadcast()的傳參
(1) 舉例:在一個單頁中定義了nested views,你希望讓所有子作用域都監聽到某個參數的變化,并且作出相應動作。比如一個地圖應用,某個state中定義元素input,輸入地址后,地圖要定位,同時另一個狀態下的列表要顯示出該位置周邊商鋪的信息,此時多個scope都在監聽地址變化。
PS: rootScope.broadcast()可以非常方便的設置全局事件,并讓所有子作用域都監聽到。
.factory('addressFactory', ['$rootScope', function ($rootScope) { // 定義所要返回的地址對象 var address = {}; // 定義components數組,數組包括街道,城市,國家等 address.components = []; // 定義更新地址函數,通過$rootScope.$broadcast()設置全局事件'AddressUpdated' // 所有子作用域都能監聽到該事件 address.updateAddress = function (value) { this.components = angular.copy(value); $rootScope.$broadcast('AddressUpdated'); }; // 返回地址對象 return address;}]);
新聞熱點
疑難解答
圖片精選