angularJS中directive父子组件的数据交互
angularJS中directive父子组件的数据交互
1. 使用共享 scope 的时候,可以直接从父 scope 中共享属性。使用隔离 scope 的时候,无法从父 scope 中共享属性。在 Directive 中创建隔离 scope 很简单,只需要定义一个 scope 属性即可,这样,这个 directive 的 scope 将会创建一个新的 scope,如果多个 directive 定义在同一个元素上,只会创建一个新的 scope。
2. directive 在使用隔离 scope 的时候,提供了三种方法同隔离之外的地方交互。这三种分别是
(1) @:单向绑定,仅当父作用域的中的变量改变时,子作用域中绑定的变量才变化,反之不成立。
html
<body ng-app="app" ng-controller="ctl1" style="text-align: center; line-height: 2em;font-size: 14px">
<div>
<div>父scope:
<div>
Say:{{name}}<br>
改变父scope的name:<input type="text" value="" ng-model="name"/>
</div>
</div>
</br></br></br></br>
<div>隔离scope:显示为hello world,随着父作用域中的name的改变而改变,</br>
由于是单向的,所以这里的name改变不会对父作用域造成任何影响。
<div test-directive name="{{name}}"></div>
</div>
</br></br></br></br>
<div>隔离scope:不使用双花括号name就直接显示为name了,不会随着父作用域中的name的改变而改变。
<div test-directive name="name"></div>
</div>
</div>
</body>
js
angular.module('app', []).controller("ctl1", function ($scope) {
$scope.name = "hello world";
}).directive("testDirective", function () {
return {
scope: {
name: "@"
},
template: 'Say:{{name}} <br>改变隔离scope的name:<input type="buttom" value="" ng-model="name" class="ng-pristine ng-valid">'
}
})
效果:改变第一个input,则第二部分的name会跟着改变,改变第二个input,第一个不会跟着改变,即绑定是单向的,改变第三个input,第一个和第二个没有任何影响,因为没有绑定。
(2). =:双向绑定,仅当父作用域的中的变量改变时,子作用域中绑定的变量才变化,反之成立。(注意在子组件和父组件中进行数据绑定的写法)
html
<body ng-app="app" ng-controller="ctl1" style="text-align: center; line-height: 2em;font-size: 14px">
<div>
<div>父scope:
<div>
Say:{{parentName}}<br>
改变父scope的name:<input type="text" value="" ng-model="parentName"/>
</div>
</div>
</br></br></br></br>
<div>隔离scope:显示为hello world,随着父作用域中的name的改变而改变,</br>
由于是双向的,所以这里的子作用域中name改变也会使父作用域做出相同的变化。
<div test-directive name="parentName"></div>
</div
</br></br></br></br>
<div>这个会报错
<div test-directive name="{{parentName}}"></div>
</div>
</div>
</body>
js
<script>
angular.module('app', []).controller("ctl1", function ($scope) {
$scope.name = "hello world";
}).directive("testDirective", function () {
return {
scope: {
childName: "=name"
},
template: 'Say:childName <br>改变隔离scope的name:<input type="buttom" value="" ng-model="childName" class="ng-pristine ng-valid">'
}
})
</script>
效果
(3). &:可以使用在父scope中定义的函数。
html
<body ng-app="app" ng-controller="ctl1" style="text-align: center; line-height: 2em;font-size: 14px">
<div>父scope:
<div>Say:{{value}}</div>
</div>
<div>隔离scope:
<div test-directive buttonClick="click()"></div>
</div>
</body>
js
angular.module('app', []).controller("ctl1", function ($scope) {
$scope.value = "hello world";
$scope.click = function () {
$scope.value = Math.random();
};
}).directive("testDirective", function () {
return {
scope: {
action: "&buttonClick"
},
template: '<input type="button" value="在directive中执行父scope定义的方法" ng-click="action()"/>'
}
})
效果:
3. 参考:https://blog.coding.net/blog/angularjs-directive-isolate-scope
angularJS中directive父子组件的数据交互的更多相关文章
- vue2中component父子组件传递数据props的使用
子组件使用父亲传过来的数据,我们需要通过子组件的 props 选项. 组件实例的作用域是孤立的,不能在子组件的模板内直接引用父组件的数据.修改父亲传过来的props数据的时候 父亲必须传递对象,否则不 ...
- 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据
前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...
- Vue中独立组件之间数据交互
独立组件之间数据交互:通过自定义事件 组件A中的[数据],传递给组件B 1.创建组件A,组件B 2.组件B在实例创建完成时就开始监听事件[等待接收数据]:钩子 3.组件A中触发事件,发送数据 注意:接 ...
- 04 . Vue组件注册,数据交互,调试工具及组件插槽介绍及使用
vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...
- 04 . Vue组件注册,组件间数据交互,调试工具及组件插槽介绍及使用
vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...
- Vue2.x中的父子组件相互通信
业务场景:(这里指的是直接父子级关系的通信) 美女(子组件)将消息发送给大群(父组件) 大群(父组件)收到美女发送的消息后再回个信息给美女(子组件) 父组件 template <template ...
- Vue基础-渲染函数-父子组件-传递数据
Vue 测试版本:Vue.js v2.5.13 做了个 demo,把父子组件的数据都绑定到 Vue 实例 app 上,注释中的 template 相对好理解些 <div id="app ...
- 后端接收不到AngularJs中$http.post发送的数据的问题
1.问题: 后端接收不到AngularJs中$http.post发送的数据,总是显示为null 示例代码: $http.post(/admin/KeyValue/GetListByPage, { pa ...
- AngularJS中使用$http对MongoLab数据表进行增删改查
本篇体验使用AngularJS中的$http对MongoLab数据表进行增删改查. 主页面: <button ng-click="loadCourse()">Load ...
随机推荐
- java final 关键词
package day9; /** * Created by admin on 2018/11/17. * final可以修饰类,方法,变量 特点: final可以修饰类,该类不能被继承. final ...
- 010-shiro与spring web项目整合【四】缓存Ehcache
一.Ehcache shiro每次授权都会通过realm获取权限信息,为了提高访问速度需要添加缓存,第一次从realm中读取权限数据,之后不再读取,这里Shiro和Ehcache整合. 1.添加Ehc ...
- Windows下QT MySQL驱动编译
在Windows环境中使用Qt进行关于MySQL数据库的操作时,会出现如下问题: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: availa ...
- 启动一个支持文件上传的HTTP-Server
Python实现,源码来自网络,代码内部有作者信息. HTTP方式共享文件,对于不需要用户名和密码验证的系统非常方便.通过浏览器就可以实现文件上传和下载.非常适合用作测试系统的脚手架. 对于系统使用c ...
- django 通过orm操作数据库
Django Model 每一个Django Model都继承自django.db.models.Model 在Model当中每一个属性attribute都代表一个database field 通过D ...
- POJ - 1904 King's Quest (强连通)
题意:有N个王子,每个王子有任意个喜欢的妹子,巫师会给出一个方案:每个妹子都嫁给一个王子.但是国王希望知道:每个王子能在哪些妹子中择偶而不影响其他王子择偶. 分析:设王子为x部,妹子为y部,假设有匹配 ...
- 搭建自己的npm仓库
第一步:安装Erlang环境 首先,安装必要的库 yum install build-essential yum install libncurses5-dev yum install libssl- ...
- Spark机器学习6·聚类模型(spark-shell)
K-均值(K-mean)聚类 目的:最小化所有类簇中的方差之和 类簇内方差和(WCSS,within cluster sum of squared errors) fuzzy K-means 层次聚类 ...
- os包方法
os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chd ...
- 20145219 《Java程序设计》第04周学习总结
20145219 <Java程序设计>第04周学习总结 教材学习内容总结 继承 继承就是避免多个类间重复定义共同行为. 面向对象中,子类继承父类,就是把程序中相同的代码部分提升为父类. R ...