vue初接触

1.安装配置

可以下载文件,也可以使用cdn直接引入。

使用了菜鸟教程的推荐网址:

<script src="https://unpkg.com/vue/dist/vue.js"></script>

也可以使用官网推荐的网址:

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

2.使用vue(举例),挂载点、模板、方法:

<div id="app">{{ message }}</div>
<script>
var app = new Vue({
  el: '#app',
template: '<p>hello</p>', data: { message:
'Hello Vue!' } }) </script>

创建一个 vue 实例,其中称 el 下的 dom 节点为我们的挂载点,也就是页面内对应的元素(element)。称template为模板,挂载点下的内容称为模板内容,模板内容可以在页面上写,也可以在template下写。只会在对应的挂载点生效。data则保存将要显示的信息,用 {{}} 在页面显示key对应的value值,{{}}这个语法称为插值表达式。template会覆盖原有的内容。

除了{{}}还有其他表达方式。例:

<div v-text="message"></div>
<div v-html="message"></div>
 

v-text会转义字符串内容,例message:"<h1>a</h1>",则显示的内容为<h1>a</h1>,v-html不会转义,则显示 a 。

绑定点击事件

<div id="app">
    <div v-on:click="handleClick">{{ message }}</div>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      message: 'Hello Vue!'
    },
    methods:{
      handleClick: function(){alert(123)}
    }
  })
</script>
 v-on:click绑定的方法,在methods里设计实现。
v-on:click可以简写成 @click
 methods:{
    handleClick: function(){
        this.message="world
    }
 }

vue可以直接修改data数据,页面也会自动改变。

3.属性绑定,双向数据绑定

<div id="app">
    <div v-bind:title="'sdx '+title">{{ message }}</div>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      message: 'Hello Vue!',
      title:"this is title"
    }
  })
</script>

鼠标移动到Hello Vue!文字时,会显示sdx this is title。v-bind:title可以缩写为:title。

 

单向绑定:数据控制页面的显示内容,双向绑定可以改变页面内容,也可以显示页面内容。随输入框内容的变化,div内容一起变化。使用v-model双向数据绑定。

<div id="app">
    <input v-model="message"/>
    <div>{{ message }}</div>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      message: 'Hello Vue!',
    }
  })
</script>

4.计算属性和侦听器

<div id="root">
    姓:<input v-model="firstname"/>
    名:<input v-model="lastname"/>
    <div>{{fullname}}</div>
<div>{{count}}</div>
</div> <script> new Vue({ el: '#root', data: { firstname: '', lastname: '',
    count:0
}, computed:{ fullname: function(){ return this.firstname+" "+this.lastname } },
watch:{
    fullname: function(){this.count++},
  } })
</script>

fuiiname会保存上次计算的缓存内容,只有当firstname或lastname变化时,才会重新计算并保存数据。

当watch内数据发生变化时,计数会改变。

5.v-if,v-show,v-for命令

<div id="app">
    <button @click="click">show/hide</button>
    <div v-if="show">{{ message }}</div>
    <div v-show="show">{{ message }}</div>
    <ul><li v-for="(item,index)item of list" :key="index">{{item}}</li></ul>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      message: 'Hello Vue',
      show: true,
      list: [1,2,3]
    },
  methods:{
    click: function(){this.show=!this.show}
  }
  })
</script>

将list列表的内容放到item中,位置下标放到index里。(index在不排序等改变位置的操作时可用,其他时候不行)

v-if时,当show为false时,该dom节点被注释。v-show则添加display:none的css样式。

6.todolist

<div id="app">
    <div>
        <input v-model="value"/>
        <button @click="click">提交</button>
    </div>
    <ul>
        <li v-for="item of list" :key="item">{{item}}</li>
    </ul>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      value: '',
      list:[]
    },
    methods:{click: function(){
            this.list.push(this.value)
            this.value=''
        }
    }
  })
</script>    

每点击一次提交,就会显示一个新的li,同时清除input内容。

<div id="app">
    <div>
        <input v-model="value"/>
        <button @click="click">提交</button>
    </div>
    <ul>
        <todo-item></todo-item>
    </ul>
</div>
<script>
    Vue.component('todo-item',{
       template:'<li>item</li>' 
    })

  var app = new Vue({
    el: '#app',
    data: {
      value: '',
      list:[]
    },
    methods:{click: function(){
            this.list.push(this.value)
            this.value=''
        }
    }
  })
</script>    

Vue.component()定义的组件称为全局组件,任何地方都能使用。
<ul>
    <todo-item v-for="item of list" :key="item" :content="item"></todo-item>
</ul>


var TodoItem={
  props:['content'],
  template:'<li>{{content}}</li>'   
}
new Vue({
    ……
        components:{
            'todo-item':TodoItem
        }
})

在Vue内设定局部组件,需设置props为从外部获取的参数。

<div id="app">
    <div>
        <input v-model="value"/>
        <button @click="click">提交</button>
    </div>
    <ul>
        <todo-item v-for="(item,index) of list" 
                   :key="index" 
                   :content="item"
                   :index="index" 
                   @delete1="Delete">
        </todo-item>
    </ul>
</div>
<script>
    Vue.component('todo-item',{
        props:['content','index'],
        template:'<li @click="click1">{{content}}</li>' ,
        methods:{
          click1: function(){
            this.$emit('delete1',this.index)
          }
        }
    })

  var app = new Vue({
    el: '#app',
    data: {
      value: '',
      list:[]
    },
    methods:{
        click: function(){
            this.list.push(this.value)
            this.value=''
        },
        Delete: function(index){
            /*从对应下标的位置删除1项*/
            this.list.splice(index,1)
        }
    }
  })
</script> 

todolist的删除功能。当li点击时,触发click1的事件,将向外触发一个事件,事件的名字是delete1,值是index。当发生delete1的事件时,会触发父组件的Delete事件,将list的下标删除。

7.组件与实例之间的关系

每一个组件都是Vue的一个实例,以下代码为例,每个组件都可以包含Vue的属性。可以称Vue为父组件,其他的为子组件。父组件向子组件传递值以属性的形式传递。

<div id="app">
    <div>
        <input v-model="value"/>
        <button @click="click">提交</button>
    </div>
    <ul>
        <todo-item v-for="(item,index) of list" 
                   :key="index" 
                   :content="item">
        </todo-item>
    </ul>
</div>
<script>
    Vue.component('todo-item',{
        props:['content'],
        template:'<li @click="click1">{{content}}</li>' ,
        methods:{
          click1: function(){
            alert("clicked")
          }
        }
    })

  var app = new Vue({
    el: '#app',
    data: {
      value: '',
      list:[]
    },
    methods:{click: function(){
            this.list.push(this.value)
            this.value=''
        }
    }
  })
</script> 

 


 

<div id="add">
    <input v-model="message"/>
    <div>{{ message }}</div>
</div>
<script>
  var app = new Vue({
    el: '#app',
    template: '<p>hello</p>',
    data: {
      message: 'Hello Vue!',
    }
  })
</script>
posted @ 2020-05-22 10:38  苏道羲  阅读(161)  评论(0编辑  收藏  举报