项目中遇到的关于兄弟controller之间传值的问题解决
层级关系如下
<ons-page ng-controller="tabbarIndexController">
<ons-tabbar position="top" var="tabbar">
<ons-tab label="新建消息" page="pages/newMsg.html" active="true"></ons-tab>
<ons-tab label="历史消息管理" page="pages/historyMsg.html"></ons-tab>
</ons-tabbar>
</ons-page>
项目需求是,在历史消息管理页面的消息列表中通过点击事件将get到的消息详情填充到新建消息页面,即将historyMsgController中的数据传给newMsgController,解决如下:
思路1:在historyMsgController中用$scope.$emit将数据发送给父级的tabbarIndexController,父级用$on接受数据后再用$scope.$broadcast广播给子级的newMsgController,子级再用$on接收。
思路2:在historyMsgController中用$scope.$parent.$emit直接利用父级scope来$scope.$broadcast广播给子级的newMsgController,子级用$on接受。
但是由于项目的特殊性,onsenui的ons-tabbar组件存在多级分层,所以思路2不适用;其次,要注意的是在onsenui中,ons-tabbar在切换中会删除切换之前的ons-page,即:
当切换至新建消息tab页时DOM节点中只有新建消息的ons-page
反之,
所以当页面处于历史消息管理tab页,此时是DOM树中是没有新建消息页面的,虽然可以从父级中广播数据到子级,但新建消息页面此时是无法接受到的,所以思路1不适用与此项目
思路3:在父级控制器中:
$scope.parentobj={};
$scope.parentobj.historyMsgData=null; //用于接收子级historyMsgController中的数据
在historyMsgController中:
msgDetails(messOne:any){ //单击消息详情展示消息和编辑消息按钮
let $scope = this.$scope;
let $log = this.$log;
let $window=this.$window;
let newMsgService = this.newMsgService;
let messOneId:any = messOne;
newMsgService.messageDetails(messOneId).then((response) => {
if (response["status"] === 200) {
$log.debug(response);
$scope.msgData= response["data"]; //先存储response中的data
$scope['parentobj'].historyMsgData=$scope.msgData; //把消息数据保存进父级的变量
console.log($scope['parentobj'].historyMsgData);
$window.tabbar.setActiveTab(0);
}
}, (error) => {
$log.debug("failure");
});
}
此时,父级中的$scope.parentobj.historyMsgData已经存储了response["data"]。
接着,在newMsgController中用一个变量接收父级的$scope.parentobj.historyMsgData,直接使用就好了!
$scope.historyMsgData=$scope['parentobj'].historyMsgData;
项目中遇到的关于兄弟controller之间传值的问题解决的更多相关文章
- SpringMVC项目中获取所有URL到Controller Method的映射
Spring是一个很好很强大的开源框架,它就像是一个容器,为我们提供了各种Bean组件和服务.对于MVC这部分而言,它里面实现了从Url请求映射控制器方法的逻辑处理,在我们平时的开发工作中并不需要太多 ...
- 如何理解springcloud微服务项目中,eureka,provider,consumer它们之间的关系?
eureka负责注册provider和consumer的服务信息 provider负责与数据库进行交互,实现数据持久化,并给consumer提供服务 consumer与前端交互,通过与Eureka同源 ...
- ASP.NET WEB API 帮助文档引用单独项目中的DTO,见面上不显示字段注释问题解决办法
StackOverFlow上的解决办法: 问题地址
- angularJS中directive与controller之间的通信
当我们在angularJS中自定义了directive之后需要和controller进行通讯的时候,是怎么样进行通讯呢? 这里介绍3种angular自定义directive与controller通信的 ...
- Web API项目中使用Area对业务进行分类管理
在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...
- angular controller之间通信方式
对于日常开发中,难免会有controller之间通信需求.对于controller之间通信有两种方式可以做到. 用 Angular 进行开发,基本上都会遇到 Controller 之间通信的问题,本文 ...
- Vue 兄弟组件之间传递数值
Vue 兄弟组件之间传值 创建一个公用文件夹,在文件夹中设置一个事件处理中心,即 然后在需要设置值的组件中引入该事件处理中心 import Hub from '../../common/eventHu ...
- react 组件之间传值
谈及React时,就会想到一个很重要的思想,就是组件化思想.它将可以重用的部分进行组件化开发,形成一个个相对独立的组件,那么组件化后,你也会提出些疑问,组件与组件之间,将怎样进行信息的传递呢?下面来介 ...
- asp.net页面之间传值方法详解
asp.net中页面之间传值我们用得最多的就是get,post这两种了,其它的如session,appliction,cookie等这些相对来说少用也不是常用的,只是在特殊情况下在使用了. 1. Ge ...
随机推荐
- 配置git同时push到两个远端库的简单方法
最近在写一个开源的论坛系统,在发布代码时选择了github和coding这两个平台,我手懒,不想敲两次git push了,所以说突然有了一个很奇怪的需求:用一条git push同时push到两个远端代 ...
- Linux LVM学习总结——删除卷组VG
在Linux系统中,如何删除一个卷组(VG)呢? 下面我总结了一下如何删除卷组(VG)的具体步骤,仅供参考,如有不足,敬请指出.谢谢!在下面的例子中,我想删除卷组VolGroup05. 步骤1: 查看 ...
- SQL Server中的“最大并行度”的配置建议
SQL Server中的最大并行度(max degree of parallelism)如何设置呢? 设置max degree of parallelism有什么好的建议和指导方针呢?在微软官方文档R ...
- 初探PHP多进程
h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...
- C/C++浮点数在内存中的存储方式
一.内存表示 任何数据在内存中都是以二进制的形式存储的,浮点数的表示是把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,数的小数点位置随比例因子的不同而在一定范围内自由浮动.如下图是3 ...
- [已解决]Teamviewer VPN 连接上,但无法ping
用Teamveiwer 可以进行远程控制连接.用了VPN功能后,起先也正常.可以PING和其他网络操作. 后来忽然始终VPN连接上后,无法PING和做其他的网络操作了. 检查缘由是对方TeamView ...
- 关于Thinkcmf中热门文章的使用
今天在做一个首页新闻列表页面的功能时候,因为要读取大量的新闻内容列表.如果每条数据都要从数据按照文章id和term_id来对应取值,无疑是很痛苦的. 然而机智如我,发现cmf框架中热门文章的用法: 在 ...
- LLVM 笔记(五)—— LLVM IR
ilocker:关注 Android 安全(新手) QQ: 2597294287 LLVM 的 IR (Intermediate Representation) 是其设计中的最重要的部分.优化器在进行 ...
- 编译软件基础知识(2/2) via LinuxSir
首先说下/etc/ld.so.conf: 这个文件记录了编译时使用的动态链接库的路径. 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件 如果你安装了某些库,比如在安装gtk+ ...
- FFMPEG在嵌入式硬件上应用之 —— 基本环境搭建及编译
前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了.今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家 ...