vue基础入门

Posted ZachChan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue基础入门相关的知识,希望对你有一定的参考价值。

 
Hello World
 
<body>
  <!-- 在angularJS中用ng-model -->
  <!-- {{mseeage?message:11}}支持三元表达式 -->
  <!--{{*}} 可以 只绑定一次 视图变化时不进行改变 -->
  <!--{{{}}} 绑定html标签 识别html标签 -->
<div class="app">
  <input type="text" v-model=‘message‘>
  <!-- {{message}} -->
  <!-- <br> {{message?message:1}} -->
<br> {{*message}} {{{message}}}

</div>
</body>
<script src="vue1.0.28.js"></script>
<script>
var vm = new Vue({ //实例 MVVM
      el: ".app",
      data: {
        // message: "333"
      message: "<h1>hello</h1>"
      }
   })
</script>

 

 
vue实例
 
<body>

<div id="app">{{message.age}}</div>

<script src="vue1.0.28.js"></script>
<script>
var mess = {
    age: 18
    }
var vm = new Vue({
        el: "#app",
     data: {
      message: mess
      }
   })
    // vm.message.age = 100;
    //我们当前实例vm和mess这个对象指向的是同一内存空间

    //在实例创建后挂载以前不存在的属性是不会刷新视图的
console.log(vm.message == mess)
</script>
</body>        

 

 
vue属性和方法
 
<body>
<div id="app">
  {{message}}   <input type="text" v-model=‘message‘><br> {{age}}
</div> <script src="vue1.0.28.js"></script> <script> var vm = new Vue({     el: "#app",     data: {     message: "aaaa"     } }) //vm.$el 不能更改绑定数据的元素 console.log(vm.$el == document.getElementById("app")) //vm.$data 就是data对应的这个对象 console.log(vm.$data); // vm.$data = { age: 200 } //可以直接更改对象指定 // console.log(vm.$data); //vm.$watch 监听数据变化 vm.$watch(‘message‘, function(newValu, oldVlue) {     console.log(newValu, oldVlue) }) </script> </body>

 

 
vue生命周期
 1 构建 new Vue()实例
 2 观察数据 (observe Data)
 3 初始化方法 (Init Events)
 4 没有问题,开始创建,调用 created 方法
 5 没发现有el元素,看是否有vm.$mount(el)方法 (这个方法的作用是就是告诉我们初始化开始,可以挂载数据了)
 6 发现el元素,看是否有模版,开始编译模版
 7 若有模版就替换,若没有模版就直接插进去
 8 编译完成
 9 插入文档中,然后调用ready()方法
10 调用vm.$destroy()就销毁了
11 先进行销毁,然后把事件、属性、子组件 去掉
12 最后销毁掉,完全死亡

 

created 先实例化,在实例化后(检测el)
vm.$mount(‘#app‘) 手动挂载实例
beforeCompile 开始编译之前
compiled 编译完成
ready 插入文档后
vm.$destory 手动销毁实例
destroyed 销毁实例
 
<body>
<div id="app">{{message}}</div>
<script src="vue1.0.28.js"></script>
<script>
var vm = new Vue({
    data: {
      message: "sss"
  },
   created() {
      alert("1:创建实例")
  },
    beforeCompile() {
      alert("2:编译前")
  },
    compiled() {
      alert("3:编译完成")
  },
    ready() {
      alert("4:准备好了")
  },
    beforeDestroy() {
      alert("5:销毁前")
  },
    destroyed() {
      alert("6:销毁了")
  }
})
//手动挂载 el
vm.$mount("#app");
//销毁需要调用$destroy
vm.$destroy();
</script>
</body>

 

 
 
 
属性的计算 
<body>
<div id="app">
  {{pages}}   <input type="text" v-model="page"> </div> <script src="vue1.0.28.js"></script> <script> var vm = new Vue({     el: "#app",     data: {       page: 1,       num: 2    },    computed: {       pages: function() { //默认的方法是获取       //在vm中所有的this指向的都是当前实例    return this.page * this.num     }   } }) </script> </body>
computed 的 set get 方法
<body>
<div id="app">
  {{pages}}   <input type="text" v-model="num"> </div> <script src="vue1.0.28.js"></script> <script> var vm = new Vue({     el: "#app",     data: {       page: 1,       num: 2    },     computed: {       pages: {         get() { //默认的方法是获取       //在vm中所有的this指向的都是当前实例         return this.page * this.num       },     set(val) {       //在设置方法去更改data中数据       this.num = val;       }     }   } }) vm.pages = 9; </script> </body>
 
 
vue 解决加载标签时的闪烁问题
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
[v-cloak] {
    display: none;
}
</style>
</head>

<body>
<div id="app">
  {{message}}   <!-- 在ng中 ng-bind可以解决单个标签闪烁问题 -->   <!-- v-text 只能解决单个闪烁问题 -->   <!-- 在ng中 ng-cloak 可以解决多级数据闪烁问题 -->   <!-- v-cloak 可以解决多级数据闪烁问题 -->   <div v-text="message"></div>   <div v-cloak>   {{message}}   </div> </div> <script src="vue1.0.28.js"></script> <script> var vm = new Vue({     el: "#app",     data: {       message: "涉及到极点拉萨警方立即as啊打算减肥阿道夫啊"     }   }) </script> </body>

 

 
v-if v-else v-show template语法 以及 v-if 和 v-show的区别

<body>
<div id="app">
  <div v-if="false">
  我是内容
  </div>
  <div v-show="false">
  我是内容
  </div>

  <!-- template标签是不会被渲染的 解决无意义的空标签问题 template一般配合v-else使用 -->
  <!-- 在 v-show上不支持template语法 -->
  <template v-if="true">
  <div>1</div>
  <div>2</div>
  </template>

  <!-- v-else要跟在v-if后面,也可以跟在v-show后面 -->
  <div v-else>
  如果template中 v-if的条件不成立 就显示 v-else
  </div>
</div>


<script src="vue1.0.28.js"></script>
<script>
var vm = new Vue({
    el: "#app",
    data: {
      message: "涉及到极点拉萨警方立即as啊打算减肥阿道夫啊"
    }
})
    // v-show/v-if的区别
    //v-show => ng-show 操作的是样式 (display:none) (一般作用于样式切换)
    //v-if => ng-if 操作的是DOM (如果条件不成立 就移除dom了) (一开始知道存在与否,不会去切换的时候用)
    //区别:v-if有更高的切换消耗 而v-show有更高的初始渲染消耗
</script>
</body>

 

 
 
遍历
 
<body>
  <!-- 在angularjs中,用ng-repeat vue中用 v-for -->
<div id="app">
  <template v-for=" (key,m) in datas">
    {{$index}}-{{key}}:{{$key}},{{m}}<br/>
  </template>
  <!-- $index 表示当前第几个 (在vue中 $odd $even $fist $last 都没有 -->
</div>
<script src="https://cdn.bootcss.com/vue/1.0.28/vue.js"></script>
<script>
var vm = new Vue({
    el:"#app",
    data:{
      datas:{
        name:"test",
        age:"12"
      }
    }
})
</script>
</body>

 

 
遍历数组   (如果没有唯一的键供追踪,就要用track-by)
 
<body>
<div id="app">
    <!-- track-by 强制通过索引去遍历 -->
    <!-- 如果在数组中取到的值为相同的值 那么需要用到track-by 防止报黄报错 -->
  <ul v-for="(key,m) in datas" track-by="$index">
    <li>{{key}}:{{$index}}-{{m.name}}:{{m.price}}</li>
    <!-- 没有$key -->
  </ul>
</div>
<script src="https://cdn.bootcss.com/vue/1.0.28/vue.js"></script>
<script>
var vm = new Vue({
      el:"#app",
      data:{
        datas:[
          {name:"苹果",price:"90"},
          {name:"香蕉",price:"91"},
          {name:"橘子",price:"92"}
        ]
      }
  })
</script>
</body>

 

 
 
嵌套遍历
 
<body>
<div id="app">
  <div v-for="(key,mess) in datas">
    <div>{{$index}}:
      {{mess.name}}:{{mess.price}}
      <div v-for="mess2 in mess.type">
        <!-- 在父级写上索引 儿子可以拿到父亲的索引值 -->
        {{key}}:{{mess2}}
      </div>
    </div>
  </div>
</div>
<script src="https://cdn.bootcss.com/vue/1.0.28/vue.js"></script>
<script>
var vm = new Vue({
      el:"#app",
      data:{
        datas:[
          {name:"苹果",price:"90",type:["red","blue"]},
          {name:"香蕉",price:"91",type:["black"]},
          {name:"橘子",price:"92",type:["pink"]}
        ]
      }
  })
</script>
</body>

 

 
 
 
动态绑定数据 (v-bind)
 
<body>
<div id="app">
  <!-- v-bind绑定动态属性 (把src绑定到v-bind上后,等待数据加载完成,才去渲染数据,不用{{}} ) -->
  <!-- 可以直接使用:的方式直接进行绑定 动态去data上的值 -->
  <!-- <img v-bind:src="imgUrl" >
  <a v-bind:href="href">{{href}}</a> -->
  <img :src="imgUrl" >
  <a :href="href">{{href}}</a>
</div>
<script src="https://cdn.bootcss.com/vue/1.0.28/vue.js"></script>
<script>
var vm = new Vue({
    el:"#app",
    data:{
      imgUrl:"https://blog.zachchan.com/wp-content/uploads/2017/12/201711071936012.png",
      href:"https://blog.zachchan.com"
    }
  })
</script>
</body>

 

 
 
绑定事件 (@,v-on:click 、methods)
 
<body>
<div id="app">
    <!-- v-on 绑定事件 :事件名字 -->
    <!-- v-on 执行方法的时候需要传递参数的时候添加(),
    如果不需要传递参数就不要写了,如果需要传递参数,我们要手动传递事件源 -->
    <!-- 我们可以通过@符号 取代 v-on: -->
 
    <!-- <div v-on:click="add(1,$event)">hello Vue</div> -->
  <div @click="add(1,$event)">hello Vue</div>
</div>
<script src="https://cdn.bootcss.com/vue/1.0.28/vue.js"></script>
<script>
var vm = new Vue({
    el:"#app",
    data:{
      imgUrl:"https://blog.zachchan.com/wp-content/uploads/2017/12/201711071936012.png",
      href:"https://blog.zachchan.com"
  },
  methods:{
      //我们在vue中把方法都定义在methods对象中
    add:function(num,e){
      //e是事件源
      console.log(num,e)
      alert(100)
    }
  }
})
</script>
</body>

 

以上是关于vue基础入门的主要内容,如果未能解决你的问题,请参考以下文章

VUE.js入门学习-基础精讲

零基础1小时入门Vue(建议收藏)

史上最详细vue的入门基础

零基础1小时入门Vue(建议收藏)

VSCode自定义代码片段1——vue主模板

VSCode自定义代码片段——.vue文件的模板