概述

  • 把Vue的实例命名为vm是作者的习惯,应该沿用
  • vm对象封装了对视图的所有操作, 包括数据读写事件绑定DOM更新
  • vm的构造函数是Vue, 按照ES6的说法,vm所属的类是Vue
  • options是new Vue的参数, 一般称之为选项构造函数

**

new Vue有哪些选项

el挂载

  1. new Vue({
  2. el: '#app', // 替换index.html中id为app的元素
  3. render: h => h(demo)
  4. })

可与$mount替换

  1. new Vue({
  2. render: h => h(demo)
  3. }).$mount('#app')

注意:挂载是替换,而不是挂到里面

data()

完整版Vue.js写法
推荐用函数
有个bug

  1. new Vue({
  2. data(){
  3. return {
  4. n:0
  5. }
  6. },
  7. template:`
  8. <div class="red">
  9. {{n}}
  10. <button @click="add">+1</button>
  11. </div>
  12. `,
  13. methods:{
  14. add(){
  15. this.n += 1
  16. }
  17. }
  18. }).$mount('#app')

methods

事件处理函数或普通函数
可以替代filter
缺点是每次渲染其他部分也会调用这个函数

  1. new Vue({
  2. data(){
  3. return {
  4. array: [1,2,3,4,5,6,7,8]
  5. }
  6. },
  7. template:`
  8. <div class="red">
  9. {{filter()}}
  10. </div>
  11. `,
  12. methods:{
  13. filter(){
  14. return this.array.filter(item => item%2 === 0)
  15. }
  16. }
  17. }).$mount('#app')

components

方法一:将vue文件引入为组件

优先使用方法一,模块化

  1. import Demo from './demo.vue'
  2. new Vue({
  3. // 组件名
  4. components:{
  5. Demo // Demo: Demo 的ES6简写
  6. },
  7. data(){
  8. return {
  9. n:0,
  10. }
  11. },
  12. template:`
  13. <div class="red">
  14. {{n}}
  15. <button @click="add">+1</button>
  16. <hr>
  17. <Demo> <!--使用组件-->
  18. </div>
  19. `,
  20. methods:{
  21. add(){
  22. this.n += 1
  23. }
  24. }
  25. }).$mount('#app')

文件名最好全小写,win10分不清大小写
组件名首字母用大写

方法二:Vue.component 声明全局组件

  1. // 注册全局组件
  2. Vue.component('Demo2', {
  3. template:`
  4. <div >
  5. Demo222222
  6. </div>
  7. `
  8. })
  9. new Vue({
  10. data(){
  11. return {
  12. n:0,
  13. }
  14. },
  15. template:`
  16. <div class="red">
  17. {{n}}
  18. <button @click="add">+1</button>
  19. <hr>
  20. <Demo2> <!--使用组件-->
  21. </div>
  22. `,
  23. methods:{
  24. add(){
  25. this.n += 1
  26. }
  27. }
  28. }).$mount('#app')

方法三:在components属性里声明

  1. new Vue({
  2. components: {
  3. Demo3: {
  4. template:`
  5. <div >
  6. Demo3333
  7. </div>
  8. `
  9. }
  10. },
  11. data(){
  12. return {
  13. n:0,
  14. }
  15. },
  16. template:`
  17. <div class="red">
  18. {{n}}
  19. <button @click="add">+1</button>
  20. <hr>
  21. <Demo3> <!--使用组件-->
  22. </div>
  23. `,
  24. methods:{
  25. add(){
  26. this.n += 1
  27. }
  28. }
  29. }).$mount('#app')

template里可以将大写变小写中间加-
image.png

4个钩子

  1. new Vue({
  2. data(){
  3. return {
  4. n:0,
  5. }
  6. },
  7. template:`
  8. <div class="red">
  9. {{n}}
  10. <button @click="add">+1</button>
  11. </div>
  12. `,
  13. methods:{
  14. add(){
  15. this.n += 1
  16. }
  17. },
  18. /* 4个钩子 */
  19. created(){
  20. // debugger 添加断点
  21. console.log('这玩意儿出现在内存中,还没有出现在页面中')},
  22. mounted(){
  23. console.log('这玩意儿出现在页面中')
  24. },
  25. updated(){
  26. console.log("更新了")
  27. console.log(this.n)
  28. },
  29. destroyed(){
  30. console.log('已经消亡了')
  31. }
  32. }).$mount('#app')

props

property
从外部引入属性
在vue文件中添加props

  1. <template>
  2. <div class="red">
  3. 我是外部demo<br>
  4. {{message}}
  5. <button @click="add2">+2</button>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. props:['message','add2'], // 以字符串数组形式列出属性
  11. }
  12. </script>
  13. <style scoped>
  14. .red {
  15. color: red;
  16. }
  17. </style>

在main.js中传入外部属性值
不加冒号是静态绑定,只能传字符串
v-bind或冒号,是动态绑定,传入的是JS代码

  1. <!-- 静态 -->
  2. <blog-post title="My journey with Vue"></blog-post>
  3. <!-- 动态赋予一个变量的值 -->
  4. <blog-post v-bind:title="post.title"></blog-post>
  5. <!-- 动态赋予一个复杂表达式的值 -->
  6. <blog-post
  7. v-bind:title="post.title + ' by ' + post.author.name"
  8. ></blog-post>