angularJs 自定义指令传值---父级与子级之间的通信
angularJs自定义指令用法我忽略,之前有写过,这里只说一下父子级之间如何传值;
例如:
模块我定义为myApp,index.html定义 <my-html bol-val="bolVal"></my-html>,index的controller定义为myAppCtrl;
js: angular.module('app.myApp')
.controller('myAppCtrl',['$scope','myService',myAppCtrl])
.service('myService',function(){
var obj = {};
this.setValue = function(key,value){
obj[key] = value;
};
this.getValue = function(key){
return obj[key];
};
this.clearValue = function(key){
delete obj[key]
};
}) //这个比较关键
.directive('myHtml',function(){
function myHtmlCtrl($scope,myService){
//子页面逻辑
$scope.myFn=function(){
alert('Hello Word!');
};//假设有这样一个函数
(1)父级给子级传过来的值console.log($scope.bolVal);
(2)子级要传给父级的值,例如要传一个变量$scope.isShow = true,
则这样设置:myService.setValue('isShow',$scope.isShow)//变量名称可以自己定义,我为了方便还直接取了isShow;
}
return {
restrict: 'E',
replace: true,
scope:{
bolVal:'=' //有时这个值不一定拿得到,是因为嵌套层级太多,需要传过去一个对象才能拿到,看情况而定,如果父级传过来是个函数,那用“&”
},
templateUrl:'app/myapp/myhtml.html',//子级html文件所在路径
controller:['$scope','myService',myHtmlCtrl],
controllerAs:'vm',
link: function ($scope,element,attrs) {
//link函数这里主要进行dom操作
(1)第一种:可以调用子级的方法。我这里是监听传过来值的变化对这个子页面进行dom操作
$scope.$watch('bolVal', function (nwVal, odVal) {
if (nwVal != odVal) {
$scope.myFn();
}
});
(2)第二种:可以灵活调用父级方法。
这里link可以做很多事情,我就不多说了,可以多找几个例子看看!
}
};
});
index页面controller逻辑
function myAppCtrl($scope,myService){
//业务逻辑
(1)父传子:
如果index页面有一个$scope.bolVal = true值;我想要传到子页面myhtml.html中,
那很简单如上写法页面里定义bol-val="bolVal",切记:遇到大写的一定加“-”并改为小写,
directive return 对象scope里bolVal:"="
(2)子传父:
如果myhtml页面中有一个值想要传到index页面,那就比较复杂,angularJs用法还是比较灵活的,
可以写一个service服务两个controller中分别注入,例如定义为myService,如上;
这时,在子页面myhtml的controller里边设置要传的值,在父页面获取传过来的值;
父页面取值,注意一点:这个值有可能会保存到本地,所以设置之前要先清除:
myService.clearValue('isShow');
myService.getValue('isShow');
}
angularJs 自定义指令传值---父级与子级之间的通信的更多相关文章
- vue $emit 父组件与子组件之间的通信(父组件向子组件传参)
1.首先新建一个子页面为 env.vue的文件(名字这里大家可以自取) 2.然后把子页面引入父页面,代码如图: import env from '@/components/common/env' ex ...
- Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)
Vue父子组件通信(父级向子级传递数据.子级向父级传递数据.Vue父子组件存储到data数据的访问) 一.父级向子级传递数据[Prop]: ● Prop:子组件在自身标签上,使用自定义的属性来接收外界 ...
- 浅析AngularJS自定义指令之嵌入(transclude)
AngularJS自定义指令的嵌入功能与vue的插槽十分类似,都可以实现一些自定义内容展现.在开始之前先简单介绍下自定义指令的transclude属性和AngularJS的内置指令ng-transcl ...
- AngularJs自定义指令详解(1) - restrict
下面所有例子都使用angular-1.3.16.下载地址:http://cdn.bootcss.com/angular.js/1.3.16/angular.min.js 既然AngularJs快要发布 ...
- AngularJS: 自定义指令与控制器数据交互
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- angularjs自定义指令Directive
今天学习angularjs自定义指令Directive.Directive是一个非常棒的功能.可以实现我们自义的的功能方法. 下面的例子是演示用户在文本框输入的帐号是否为管理员的帐号"Adm ...
- js input复选框选中父级同时子级也选中
js实现复选框选中父级元素子级元素也选中,没有子级元素选中父级也不选中的效果 HTML <tr> <td> <label> <input name=" ...
- js父页面和子页面之间传值
今天和朋友一块讨论,怎样通过js在父页面和子页面之间传值的问题,总结例如以下: 需求描写叙述:父页面有多个子页面.实如今父页面点击子页面,传值到子页面. 看着非常easy,试了好久.主要纠结在怎样获取 ...
- Iframe父页面与子页面之间的调用
原文:Iframe父页面与子页面之间的调用 Iframe父页面与子页面之间的调用 专业词语解释如下: Iframe:iframe元素是文档中的文档. window对象: 浏览器会在其打 ...
随机推荐
- JVM性能分析工具详解--MAT等
获得堆转储文件 巧妇难为无米之炊,我们首先需要获得一个堆转储文件.为了方便,本文采用的是 Sun JDK 6.通常来说,只要你设置了如下所示的 JVM 参数: -XX:+HeapDumpOnOutOf ...
- 【转】Unicode(UTF-8, UTF-16)令人混淆的概念
参考地址:http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html Java中,char类型用UTF-16编码描述一个代码单元 为啥 ...
- 5.2 《锋利的jQuery》jQuery对表格的操作(选项卡/换肤)
表格隔行变色以及单选/复选 表格展开关闭 表格筛选 字体变大/缩小 选项卡 网页换肤 tip1: $("tr:odd")和$("tr:even")选择器索引是从 ...
- 校园网络 usaco
这道题和上一道[最受欢迎的牛]差不多,都是强连通分量的练习题: 第一问实际上就是问缩点后入度为0的点有多少,第二问就是问添加几条边能使缩点后的图变成强连通图: 第一问好做,第二问需要动下脑子,也不难: ...
- BA优化PnP的思路
由之前的PnP,可以求出一个R,t,K又是已知的.而且空间点的世界坐标知道,第二个相机位姿的像素坐标也是知道的.就可以利用它们进行优化.首先确定变量为const vector<Point3f&g ...
- echarts如何显示在页面上
echarts如何显示在页面上 1.引入echarts的相关.js文件 <script src="js/echarts.min.js"></script> ...
- POJ 2503 Babelfish(map,字典树,快排+二分,hash)
题意:先构造一个词典,然后输入外文单词,输出相应的英语单词. 这道题有4种方法可以做: 1.map 2.字典树 3.快排+二分 4.hash表 参考博客:[解题报告]POJ_2503 字典树,MAP ...
- Eclipse_配置_00_资源帖
1.Eclipse常用设置 2.eclipse设置和优化 3.Eclipse在工作中的一些常用设置及快捷键整理 4.Eclipse常用插件下载地址
- hadoop源码剖析--hdfs安全模式
一.什么是安全模式 hadoop安全模式是name node的一种状态,处于该状态时有种量特性: 1.namenode不接受任何对hfds文件系统的改变操作(即此时整个文件系统处于只读状态): 2.不 ...
- Cloudera Manager 5 和 CDH5 本地(离线)安装指南
http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.0.0/RPMS/x86_64/ http://archive-primary.clouder ...