AngularJs 生命周期$onChanges钩子函数总结
1.概念
1.可变对象(在js中,对象是可变的)
var person ={name:'张三',//在对象中创建了一个值为张三的name对象age:'18'
}
person.name ='李四' //给name赋值一个新的值,这个时候并不会个对象name分配新的内存地址,而是在原来的地址上修改了原来的值
2.不可变对象
字符串是不可变的,也是说当一个字符串在内存中被创建后,他的值永远是不变的!
var name =' 张三'; //创建一个值为张三的字符串name='李四' //内存中重新分配了个地址指向新的字符串李四
3.$onChanges概念
当父子组件之间发生传值时,父把值传给子组件,当这个值得发了变化,你想让子也能感应到这个值变化,此时要用到$onChanges,如果你传的是一个对象,这里你要区分到底可变对象和不可变对象,只是改变对象的某个属性是不会触发$onChanges,如果你传的是不可变对象(类似字符串),如果这个值改变,子会触发$onChanges。
1.例子
可变对象的
html
<div ng-controller='mainController as vm' ng-click="vm.clicked()"><b-test config='vm.test'></b-test>
</div>
js
var app = angular.module('mainApp', []);app.controller('mainController', function () {var vm = this;vm.test = {a: 1,b: 2};vm.clicked = function () {vm.test.a = 2;};});app.component("bTest", {template: "<div>b</div>",controllerAs: 'ctrl',bindings: {config: '<',},controller: [function () {var ctrl = this;ctrl.$onChanges = function (changes) {console.log('子组件方法执行');};}]})
这里父组件里面传一个test对象给子组件, 当点击父时候改变test对象里面的a属性值,并没有这个对象改变引用地址,所以子组件的$onChanges不会执行,如果是点击父时候把整个test对象改变了,相当于重新指向了一个新的引用地址,子组件的$onChanges会执行!
不可变对象
<div ng-controller='mainController as vm' ng-click="vm.clicked()"><b-test config='vm.test.a'></b-test></div>
其他代码不变,只是把test一个a属性传给子,这是个不可变对象,所以子组件的$onChanges会执行!这里有个坑!如果你绑定的不是单向绑定('<')而是双向绑定('=')是不会触发$onChanges事件的!
扩展下
当父传值给子组件,子组件接受到这个值并且改变这个值,这个时候怎么让父组件更新这个值变化!
html
<div ng-controller='mainController as vm' "><b-test config='vm.test.a' on-update="vm.upDate($event);"></b-test></div>
在子组件里面有个upDate方法 是父传进去的
js
var app = angular.module('mainApp', []);app.controller('mainController', function () {var vm = this;vm.test = {a: 1,b: 2};vm.upDate = function (event) {this.test = event.test;console.log(this.test);};});app.component("bTest", {template: "<button ng-click='ctrl.clicked()'>b</button>",transclude: true,controllerAs: 'ctrl',bindings: {config: '<',onUpdate: '&'},controller: [function () {var ctrl = this;ctrl.clicked = function () {ctrl.config.a = 2;ctrl.onUpdate({$event: {test: ctrl.config}});};}]})
当子触发点击事件,改变了父传进来的值,然后子组件利用父组件传进来的方法,然后把值放到event 事件上,这样就相当调用了父组件上的upDate方法,然后值是通过event传进来的,这样父就能更新值的变化,如果是父组件改变的值的话,子组件可以通过$onChanges去做文章,其实有很多其他的方法,这里只是把我在做项目中的用到的方法分享下!
AngularJs 生命周期$onChanges钩子函数总结相关推荐
- 初探 Vue 生命周期和钩子函数
生命周期 生命周期函数就是 Vue 实例在某一个时间点会自动执行的函数. 简单来说就是好像把人的出生到死亡分成一个个阶段,你取名字肯定是在你出生阶段,而不是在成年阶段:你结婚肯定是在成年阶段,而不是在 ...
- [vue] 你有写过自定义指令吗?自定义指令的生命周期(钩子函数)有哪些?
[vue] 你有写过自定义指令吗?自定义指令的生命周期(钩子函数)有哪些? bind inserted update componentUpdated unbind 个人简介 我是歌谣,欢迎和大家一起 ...
- vue的生命周期和钩子函数的理解
对于vue的生命周期,官方文档上并没有太多的文字性说明,把自己对生命周期和钩子函数的理解记录下来 官方文档 自己的理解 vue生命周期的概念:vue对象从被创建,到执行逻辑,最后到被销毁的过程. 具体 ...
- Vue的过滤器,生命周期的钩子函数和使用Vue-router
一.过滤器 1.局部过滤器 在当前组件内部使用过滤器 给某些数据 添油加醋 //声明 filters:{'过滤器的名字':function(val,a,b){//a 就是alax ,val就是当前的数 ...
- Vue2.0 探索之路——生命周期和钩子函数的一些理解
前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什 ...
- vue 声明周期函数_Vue2.0 探索之路——生命周期和钩子函数的一些理解
前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什 ...
- Vue2.0 探索之路——生命周期和钩子函数
vue生命周期简介 Lifecycle hooks 在这里插入代码片 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执行. ps:下面代码可以 ...
- Vue生命周期和钩子函数的一些理解
vue生命周期简介 咱们从上图可以很明显的看出现在vue2.0都包括了哪些生命周期的函数了. 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执 ...
- Vue实例生命周期函数(钩子函数)详解
一.钩子函数 在了解vue生命周期函数之前,我们先看看啥叫"钩子函数"?百度一下是这样一段官方解释:"钩子函数是Windows消息处理机制的一部分,通过设置"钩 ...
最新文章
- Redis运行流程源码解析
- 三十七、Prim算法--求解最小生成树
- Fibonacci数列时间复杂度之美妙
- ubuntu 10.04源 更新源列表
- C语言如何返回格式化日期时间(格式化时间)?(将日期和时间以字符串格式输出)ctime()、asctime()、localtime()、strftime()
- c++函数为什么带imp_二次函数含参最值问题,老师怎么讲学生都不明白,试试这九张动图...
- Qt实用快捷键(较全面)
- 【2014-11-23】《The Hardware/Software Interface》– Section 11
- 漫话CLR ---- 属性
- 仿各大app的商品详情页购买信息弹幕
- 【Android】全网最详细的Android入门基础教程,零基础速领
- 大型超市计算机管理系统论文,大型超市进销存管理系统的设计与实现
- html文字多余部分三个点,解决特殊符号和字母换行问题
- 大家都在学Python,你和别人的差距在哪?
- J v a v 与 您
- 音视频算法在淘宝中的应用
- GSoC2011 主要入选方向
- PTA 1100 校庆(Python3)
- 基音周期估计-Yin
- 解决base64数组转jpg图片保存本地无法识别的问题