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. 9月热文精选,为你的假期加点料
  2. 1.5w字,30图带你彻底掌握 AQS!
  3. 邬贺铨院士:认识工业互联网
  4. android内存取证实现,[内存取证]Volatility基本用法
  5. 生活中的实验 —— 磁铁的使用
  6. java 文件字节流_Java:文件字符流和字节流的输入和输出
  7. Tomcat服务器目录结构
  8. springboot优雅地统一返回格式
  9. Linux看内存标压低压,三代锐龙、国产Linux上身笔记本电脑,性能是否和参数一样好看?...
  10. spark学习-Spark性能调优(1)
  11. 《2020信息消费战“疫”案例集》发布 邬贺铨院士作序推荐(附下载连接)
  12. 架构师必备之最全最系统的 Android 界面性能调优资料
  13. php脚本自动登录telnet,Windows环境上telnet自动登录和运行脚本
  14. Unity2018官方汉化包
  15. Skyline软件二次开发初级——3如何在WEB页面中的三维地图上创建几何对象
  16. Kali Linux终端命令大全(建议收藏!)
  17. [OpenCV实战]1 基于深度学习识别人脸性别和年龄
  18. 推荐一个文献翻译软件--Deja Vu X
  19. java设计扑克牌比大小_2019-08-09Day10 单例设计模式,扑克牌比大小游戏(Java)
  20. SendMessage用法

热门文章

  1. 微信公众号html在线编辑器,【微信公众平台工具开发】雷人微信网页编辑器
  2. mysql1055_MySQL5.7 group by新特性报错1055的解决办法
  3. mac搜索不到wifi wtg_Mac连不上WiFi怎么办?Mac连不上无线网络解决办法
  4. 用ArcGIS Server服务Print打印高清大图的关键参数
  5. 最强内存稳定性测试软件,内存稳定性测试软件TM5
  6. SQL优化:使用distribute by 防止数据倾斜
  7. 零基础最详细html和css
  8. 最常见的管理误区,你中招了吗?
  9. 做软件测试有前途么?
  10. Spring 青鸟云题库