在参加字节跳动的暑假训练营组队后,队伍决定用vue完成项目,于是便开始学习vue框架,以下是学习时的一些感想和笔记.
1.和微信小程序不同的是 vue在容器的属性里想要实现动态效果需要这样写:
- <div class="hello">hello,{{name}}
- <div :class="class1">?div>
- <div v-bind:class="class1">?div>
- div>
- <script type="text/javaScript" src="../js/vue.js">script>
- <script type="text/javaScript">
- Vue.config.productionTip=false
- const x = new Vue({
- el:'.hello',
- data:{
- name:'李明',
- class1:'你好',
- },
- });
- script>
而微信小程序可以直接查找变量名:
- <view class="list">
- <view class="{{thing[index].str==nowThing ? 'item1':'item'}}" wx:for="{{thing}}" data-index="{{index}}" bindtap="thing">
- {{thing[index].str}}view>
- view>
*:v-bind:为单向绑定,只能从js指向html,而v-model为双向绑定.但只能用于html中的表单元素元素.
2.一个实例化vue对象只能绑定一个HTML容器,一个HTML容器只能绑定一个vue对象,双方是一一对应关系.
3.vue实例绑定html的两种方法:
- const x = new Vue({
- el:'.hello',
- data:{
- name:'李明',
- class1:'你好',
- },
- });
第二种:更加灵活,可添加其他函数或判断.
- const x = new Vue({
- // el:'.hello',
- data:{
- name:'李明',
- class1:'你好',
- },
- });
- setTimeout(() => {
- x.$mount(".hello")
- }, 1000);
4.data的两种写法:
1.
- data:{
- name:'李明',
- class1:'你好',
- },
2.
- data(){
- return{
- name:'李明',
- class1:'你好'
- }
- }
*:所有由vue管理的函数都不能写成=>函数,因为这样会将this所指从vue替换为Window.
5.数据代理
Object.defineProperty方法,通过该方法来实现数据代理,通过一个对象代理来对另一个对象的属性来进行(读/写).
- let number = 18
- let person = {
- name: '张三',
- sex: '男',
- }
-
- Object.defineProperty(person, 'age', {
- // value:18,
- // enumerable:true, // 控制属性是否可以枚举,默认值是false
- // writable:true, // 控制属性是否可以被修改,默认值是false
- // configurable:true // 控制属性是否可以被删除,默认值是false
-
- // 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
- get() {
- console.log('有人读取age属性了')
- return number
- },
-
- // 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
- set(value) {
- console.log('有人修改了age属性,且值是', value)
- number = value
- }
-
- })
- // console.log(Object.keys(person))
- console.log(person)