国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

angularjs項(xiàng)目的頁(yè)面跳轉(zhuǎn)如何實(shí)現(xiàn)(5種方法)

2024-05-06 15:16:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Angular頁(yè)面?zhèn)鲄⒂卸喾N辦法,根據(jù)不同用例,我舉5種最常見的:

PS: 在實(shí)際項(xiàng)目中,請(qǐng)參照https://github.com/johnpapa/angular-styleguide優(yōu)化您的代碼。

1. 基于ui-router的頁(yè)面跳轉(zhuǎn)傳參

(1) 在AngularJS的app.js中用ui-router定義路由,比如現(xiàn)在有兩個(gè)頁(yè)面,一個(gè)頁(yè)面(producers.html)放置了多個(gè)producers,點(diǎn)擊其中一個(gè)目標(biāo),頁(yè)面跳轉(zhuǎn)到對(duì)應(yīng)的producer頁(yè),同時(shí)將producerId這個(gè)參數(shù)傳過去。

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

(2) 在producers.html中,定義點(diǎn)擊事件,比如ng-click="toProducer(producerId)",在ProducersCtrl中,定義頁(yè)面跳轉(zhuǎn)函數(shù) (使用ui-router的$state.go接口):

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

(3) 在ProducerCtrl中,通過ui-router的$stateParams獲取參數(shù)producerId,譬如:

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

2. 基于factory的頁(yè)面跳轉(zhuǎn)傳參

舉例:你有N個(gè)頁(yè)面,每個(gè)頁(yè)面都需要用戶填選信息,最終引導(dǎo)用戶至尾頁(yè)提交,同時(shí)后一個(gè)頁(yè)面要顯示前面所有頁(yè)面填寫的信息。這個(gè)時(shí)候用factory傳參是比較合理的選擇(下面的代碼是一個(gè)簡(jiǎn)化版,根據(jù)需求可以不同定制):

.factory('myFactory', function () {    //定義參數(shù)對(duì)象  var myObject = {};    /**   * 定義傳遞數(shù)據(jù)的setter函數(shù)   * @param {type} xxx   * @returns {*}   * @private   */  var _setter = function (data) {    myObject = data;     };  /**   * 定義獲取數(shù)據(jù)的getter函數(shù)   * @param {type} xxx   * @returns {*}   * @private   */  var _getter = function () {    return myObject;  };  // Public APIs  // 在controller中通過調(diào)setter()和getter()方法可實(shí)現(xiàn)提交或獲取參數(shù)的功能  return {    setter: _setter,    getter: _getter  };});

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

(1) 舉例:在一個(gè)單頁(yè)中定義了nested views,你希望讓所有子作用域都監(jiān)聽到某個(gè)參數(shù)的變化,并且作出相應(yīng)動(dòng)作。比如一個(gè)地圖應(yīng)用,某個(gè)$state中定義元素input,輸入地址后,地圖要定位,同時(shí)另一個(gè)狀態(tài)下的列表要顯示出該位置周邊商鋪的信息,此時(shí)多個(gè)$scope都在監(jiān)聽地址變化。

PS: $rootScope.$broadcast()可以非常方便的設(shè)置全局事件,并讓所有子作用域都監(jiān)聽到。

.factory('addressFactory', ['$rootScope', function ($rootScope) {  // 定義所要返回的地址對(duì)象    var address = {};    // 定義components數(shù)組,數(shù)組包括街道,城市,國(guó)家等  address.components = [];  // 定義更新地址函數(shù),通過$rootScope.$broadcast()設(shè)置全局事件'AddressUpdated'  // 所有子作用域都能監(jiān)聽到該事件  address.updateAddress = function (value) { this.components = angular.copy(value); $rootScope.$broadcast('AddressUpdated');  };    // 返回地址對(duì)象  return address;}]);            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 湄潭县| 曲麻莱县| 安溪县| 奉化市| 东城区| 茌平县| 河间市| 五台县| 岚皋县| 兴化市| 犍为县| 长乐市| 印江| 勐海县| 奈曼旗| 思南县| 麻江县| 沅江市| 乐至县| 新巴尔虎左旗| 安阳县| 辽阳县| 石渠县| 银川市| 禄劝| 嵊州市| 横山县| 林芝县| 甘谷县| 油尖旺区| 扶沟县| 肃宁县| 勃利县| 长宁区| 苏州市| 西城区| 永和县| 瑞丽市| 河间市| 永新县| 利川市|