AngularJS进阶(八)实现页面跳转并进行参数传递

})

.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 ( s c o p e ,   scope,  scope, state) {

$scope.toProducer = function (producerId) {

$state.go(‘producer’, {producerId: producerId});

};

});


(3) 在ProducerCtrl中,通过ui-router的$stateParams获取参数producerId,譬如:



.controller(‘ProducerCtrl’, function ( s c o p e ,   scope,  scope, state, $stateParams) {

var producerId = $stateParams.producerId;

});


### 2. 基于factory的页面跳转传参


举例:你有N个页面,每个页面都需要用户填选信息,最终引导用户至尾页提交,同时后一个页面要显示前面所有页面填写的信息。这个时候用factory传参是比较合理的选择(下面的代码是一个简化版,根据需求可以不同定制):



.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;

});


### 3. 基于factory和$rootScope.$broadcast()的传参


(1) 举例:在一个单页中定义了nested views,你希望让所有子作用域都监听到某个参数的变化,并且作出相应动作。比如一个地图应用,某个$state中定义元素input,输入地址后,地图要定位,同时另一个状态下的列表要显示出该位置周边商铺的信息,此时多个$scope都在监听地址变化。PS: $rootScope.$broadcast()可以非常方便的设置全局事件,并让所有子作用域都监听到。



.factory(‘addressFactory’, [' r o o t S c o p e ′ ,   f u n c t i o n   ( rootScope', function ( rootScope, function (rootScope) {

// 定义所要返回的地址对象

var address = {};

// 定义components数组,数组包括街道,城市,国家等

address.components = [];

// 定义更新地址函数,通过 r o o t S c o p e . rootScope. rootScope.broadcast()设置全局事件’AddressUpdated’

// 所有子作用域都能监听到该事件

address.updateAddress = function (value) {

this.components = value.slice();

r o o t S c o p e . rootScope. rootScope.broadcast(‘AddressUpdated’);

};

// 返回地址对象

return address;

}]);


(2) 在获取地址的controller中:// 动态获取地址,接口方法省略



var component = {

addressLongName: xxxx,

addressShortName: xxxx,

cityLongName: xxxx,

cityShortName: xxxx

};

// 定义地址数组

$scope.components = [];

s c o p e . scope. scope.watch(‘components’, function () {

// 将component对象推入$scope.components数组

components.push(component);

总结

为了帮助大家更好温习重点知识、更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。

包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。

前端面试题汇总

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

JavaScript

性能

linux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值