今天写vue里面通过接口反参动态加载组件时候 跟着同学。。。学习到了
一、先说说vue 内置组件 component 的用法
component组件可以来专门用来进行组件的切换,使用is来绑定你的组件名,本次系统写的比较简单。。。
此处::is='组件名'可以直接条用组件。
因为全页面有十个组件加载,所以用到了循环、数组。就遇到了在方法里可以打印数组里的值,但绑定组件名的地方获取不到的问题。
后来加上了一个数组b,并把b数组的值赋值给a。a就可以获取到了。就是实现了动态加载组件。
二、观察者模式
我需要遍历的数组值更新了,值也赋值了,为什么视图不更新?这个问题网上也有很多解释。
数组之所以获取不到是因为绑定中的观察者模式没有检测到b数组的改变,补习了一下观察者模式。https://blog.csdn.net/xidongdong1/article/details/78613654
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
如何解决:使用面向对象技术,可以将这种依赖关系弱化。
关键代码:在抽象类里有一个 ArrayList 存放观察者们。
在vue中model被定义为观察者,而view里面进行一处或多处依赖数据绑定即为观察者。https://www.cnblogs.com/pi-xia/articles/9351432.html中还列举了一些被观察者对观察者的控制方法。
当a赋值为b后才被观察者模式检测到,由此也补习了点JS参数值传递和引用传递的知识
三、JS参数值传递和引用传递
字符串、数字、布尔、数组、对象、Null、Undefined
由于js
中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.
typeof 123 //Number //NaN/isNaN
typeof 'abc' //String
typeof true //Boolean //true/false
typeof undefined //Undefined
typeof null //Object //被当一个空对象引用了
typeof { } //Object
typeof [ ] //Object
typeof console.log() //Function
三大引用类型:object /Array/Function (按存储类型)
值类型,复制值
引用类型,复制值,但其实是地址,实际上是指针。两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象。因此,改变其中任何一个变量,都会相互影响
可以这样理解 数组里的值改变之后,观察者监听的是a的值,其实是地址,但地址值并没有改变。所以监听不到。而a[]=b[]后,地址值改变就监听到了。
下面的代码:
var a=[1,2,3]
function aaa(b){
b.push(4)
}
aaa(a)
alert(a)// [1,2,3,4]
这里b、a所指地址一样,所以b加了值4,a中的值也改变了。
此外,值类型赋值应该是存储的就是a1=3,这样的值。
这是我目前的理解,这都是以前看过的东西,没有深刻理解,就忘记了。基础的东西不应该忘呀!
有问题的地方欢迎指正。。。谢谢