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钩子函数总结相关推荐

  1. 初探 Vue 生命周期和钩子函数

    生命周期 生命周期函数就是 Vue 实例在某一个时间点会自动执行的函数. 简单来说就是好像把人的出生到死亡分成一个个阶段,你取名字肯定是在你出生阶段,而不是在成年阶段:你结婚肯定是在成年阶段,而不是在 ...

  2. [vue] 你有写过自定义指令吗?自定义指令的生命周期(钩子函数)有哪些?

    [vue] 你有写过自定义指令吗?自定义指令的生命周期(钩子函数)有哪些? bind inserted update componentUpdated unbind 个人简介 我是歌谣,欢迎和大家一起 ...

  3. vue的生命周期和钩子函数的理解

    对于vue的生命周期,官方文档上并没有太多的文字性说明,把自己对生命周期和钩子函数的理解记录下来 官方文档 自己的理解 vue生命周期的概念:vue对象从被创建,到执行逻辑,最后到被销毁的过程. 具体 ...

  4. Vue的过滤器,生命周期的钩子函数和使用Vue-router

    一.过滤器 1.局部过滤器 在当前组件内部使用过滤器 给某些数据 添油加醋 //声明 filters:{'过滤器的名字':function(val,a,b){//a 就是alax ,val就是当前的数 ...

  5. Vue2.0 探索之路——生命周期和钩子函数的一些理解

    前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什 ...

  6. vue 声明周期函数_Vue2.0 探索之路——生命周期和钩子函数的一些理解

    前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什 ...

  7. Vue2.0 探索之路——生命周期和钩子函数

    vue生命周期简介 Lifecycle hooks 在这里插入代码片 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执行. ps:下面代码可以 ...

  8. Vue生命周期和钩子函数的一些理解

    vue生命周期简介 咱们从上图可以很明显的看出现在vue2.0都包括了哪些生命周期的函数了. 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执 ...

  9. Vue实例生命周期函数(钩子函数)详解

    一.钩子函数 在了解vue生命周期函数之前,我们先看看啥叫"钩子函数"?百度一下是这样一段官方解释:"钩子函数是Windows消息处理机制的一部分,通过设置"钩 ...

最新文章

  1. Redis运行流程源码解析
  2. 三十七、Prim算法--求解最小生成树
  3. Fibonacci数列时间复杂度之美妙
  4. ubuntu 10.04源 更新源列表
  5. C语言如何返回格式化日期时间(格式化时间)?(将日期和时间以字符串格式输出)ctime()、asctime()、localtime()、strftime()
  6. c++函数为什么带imp_二次函数含参最值问题,老师怎么讲学生都不明白,试试这九张动图...
  7. Qt实用快捷键(较全面)
  8. 【2014-11-23】《The Hardware/Software Interface》– Section 11
  9. 漫话CLR ---- 属性
  10. 仿各大app的商品详情页购买信息弹幕
  11. 【Android】全网最详细的Android入门基础教程,零基础速领
  12. 大型超市计算机管理系统论文,大型超市进销存管理系统的设计与实现
  13. html文字多余部分三个点,解决特殊符号和字母换行问题
  14. 大家都在学Python,你和别人的差距在哪?
  15. J v a v 与 您
  16. 音视频算法在淘宝中的应用
  17. GSoC2011 主要入选方向
  18. PTA 1100 校庆(Python3)
  19. 基音周期估计-Yin
  20. 解决base64数组转jpg图片保存本地无法识别的问题

热门文章

  1. Spring到底是什么
  2. 主动防病毒产品及实测篇
  3. Salesforce的V2MOM工作法:明确企业在做什么
  4. Android 悬浮窗功能的实现
  5. 全网最新小白API查Q绑定带反查SGK+带接口
  6. 【三石jQuery视频教程】01.图片循环展示_重发
  7. scrapy 动态网页处理——爬取鼠绘海贼王最新漫画
  8. 一个超级超级准的心理测试
  9. 花拳绣腿的「融360」:金融AI第一股今安在?|| 新芒X
  10. 设计模式回顾——模板模式(C++)