Vue基本用法

Vue

·Vue的核心思想是只要改变数据,页面就发生变化
1、vue实例

vue 要在body标签里面,引入一对script标签,src="vue.js"导入vue

再引入一对script来new一个vue的实例,使用

<body>
	<div id="app"> 
  	被下面的Vue实例接管
  </div>  

<script src="vue.js"></script>
<script>
    //new 一个Vue对象
    new Vue({
        el: '#app', //el:代表接管的div元素-id是app
        data: {     //data 是对象里面的数据
            sex: 2
        },
        methods: {  //methods:是对象里面的方法
            change: function () {
                alert('打印alert')
            }
        }
    })
</script>
</body>

vue实例关注:

el: vue接管的div元素

注:只能接管一个div,所有需要vue处理,必须写在这个div内。

data:数据

methods:方法

被vue修饰的div,也是在body中,但是必须在vue实例化之前,因为实例化的时候要拿到el: 否则找不到

2、vue的用法
2.1、{{ xx }}直接显示数据

在div标签里,直接{{}},就能显示在vue里data下定义的数据

{{}}模板语言只能应用于标签中间

<div id="app">
    <div>{{sex}}</div>
    
</div>
2.2、 v-on 指令绑定\绑定事件
<div id="app">
    <div>{{sex}}</div>
    <input type="button" @click="change" value="指令绑定">
    <input type="button" v-on:click="change" value="全写">
</div>

click对应的方法是 vue实例里面的methods的方法

其中 @ 是简写

​ v-on:是全写

2.3、 v-bind 标签属性绑定

v-bind:

加了v-bind:xxx之后,该xxx属性就可以应用data里面的数据

在属性前面写上v-bind,会自动去寻找vue里面是否有url的值

其中,全写 v-bind:

简写 :

<div id="app">

    <a v-bind:href="url">引用data里的url</a>
    <a :href="url">简写</a>

</div>

下面就是,{样式表:条件判断} 如果is_bg是true,就应用bg

就是把true动态化了,可以修改data里的数据来影响样式

class引用data里面的classes

class引用bg和box,以data里面的is_bg is_box为条件

<div id="app">
    <div :class="classes"></div>
	<div :class="{bg:is_bg,box:is_box}"></div>

</div>
2.4、 v-if v-elif-if v-else 条件判断 和v-show

例:接口测试平台,成功 失败,根据后台返回的结果状态。显示对应的文案

其中,phoneNumber是data里面的值

<div id="app">
    <span v-if="phoneNumber==10086">移动公司</span>
    <span v-else-if="phoneNumber==10010">联通公司</span>
    <span v-else>电信公司</span>
    <span v-show="phoneNumber==10086">移动公司</span>
</div>
<script src="./day12/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data:{
            phoneNumber: 10010
        }
    })
</script>

v-if 只有符合条件的元素 才加载

v-show就是 如果条件不匹配,就不展示,会自动加上一个display标签

​ 如果条件为False 则对标签增加 display=none

2.5、 v-for 循环

循环列表和循环列表并且展示脚标

<div id="app">
<!--games:['绝地求生','英雄联盟','王者荣耀']-->
    <ul>
        <li v-for="game in games">{{game}}</li>
        <!--    要展示脚标的-->
        <ul v-for="(game,index) in games">{{game}}--{{index+1}}</ul>

    </ul>
</div>

循环字典,展示字典里的value

<div id="app">
<!-- games:{'name':'绝地求生','company':'蓝洞'}-->
    <ul>
        <li v-for="game in games">{{game}}</li>
    </ul>
</div>

循环字典,展示字典里的key,value

<div id="app">
<!-- games:{'name':'绝地求生','company':'蓝洞'}-->
<!--要展示key和value,所有的v-for循环里面,index都是在后面,先是value,后是key-->
    <ul>
        <li v-for="(value,key) in games">{{key}}:{{value}}</li>
    </ul>
</div>

循环 列表里有字典 取出来名字

<div id="app">
<!--games:[{'name': '绝地求生'},{'name':'英雄联盟'},{'name':'王者荣耀'}]-->
    <ul>
        <li v-for="game in games">{{game.name}}</li>
    </ul>
</div>
2.6 v-model 双向数据绑定,就是和value进行绑定
<div id="app">
<!--    v-model  双向数据绑定 输入框-->
    <div>{{input_value}}</div>
    <!--    将输入框的输入数据 和input_value进行了双向绑定,input_value的默认是defaul-->
    <input type="text" v-model="input_value">
    <!--给按钮,绑定了change方法,change方法是将input_value变成厂 value-->
    <input type="button" value="change" @click="change">
    
<!--        双向绑定 单选框  将选择框的value和sex的值进行了双向绑定-->
    <div>{{sex}}</div>
    <input type="radio" value="1" name="sex" v-model="sex"><input type="radio" value="2" name="sex" v-model="sex"><!--        双向绑定 列表,复选框-->
    <div>{{movies}}</div>
    <input type="checkbox" value="钢铁侠" v-model="movies">钢铁侠
    <input type="checkbox" value="特斯拉" v-model="movies">特斯拉
    
<!--        双向绑定,下拉选择框-->
    <div>{{movie}}</div>
    <select v-model="movie">
        <option disabled value="">请选择</option>
        <option value="钢铁侠">钢铁侠</option>
        <option value="战狼">战狼</option>
    </select>

    <div>这里是movie:{{movie}}</div>
    <select v-model="movie">
<!--    v-model movie就是 将movie和option的value进行了双向数据绑定-->
<!--    需求是展示name到页面,将id作为value,value必须用 :value,这样才能-->
<!--    和option.id绑定(:是v-bind的简写,这样能应用data里面的数据)-->
        <option disabled value="">请选择</option>
        <option v-for="option in options" :value="option.id">{{option.name}}</option>
    </select>
</div>

data:{
    input_value:'default',
    sex:2,
    movies:['钢铁侠','战狼'],
    movie:'',
    options:[{"name":"战狼","id":1},{"name":"特斯拉","id":2},{"name":"钢铁侠","id":3}]
        },
methods:{
    change:function () {
    this.input_value = 'change value'
           }
    }
2.7、filter 过滤器
<script>
    new Vue({
      el:"#app",
      filters:{
        func:function(){	
        }
      }
    })
    默认将 | 左侧count传递给右侧的方法
    {{count|filterFunc}}

    可以传多个参数
    {{count|filterFunc("test")}}

    func:function(value,test){

    }
</script>
2.8、VUE的生命周期

mounted–>常用钩子–>完成初始化数据

<script>
    new Vue({
        el:'#app',
        data:{
            msg:''
        },
        mounted:function () {
            //钩子函数就是预留的 在各个节点的时候运行的,做修改用的
            //获取到数据源,导致了页面的msg的变化
            this.msg = '获取到后台数据'
            console.log('mounted')
        }
    })
</script>
2.9、$refs

a)、获取标签

<div ref="test"></div>

this.$refs.test // 获取到标签  可以理解为 document.getElementbyID 获取的是标签对象

b)、获取组件

<test ref="a"></test>
this.$refs.a.xxxx // 可以获取组件中的data声明的数据

console.log(this.$refs.a.number)

一个例子

<div id="app">
<!--  div里面的都是父组件,引用的别的组件都是子组件-->
  <test ref="a"></test>
  <test ref="b"></test>
  <div>父组件-{{count}}</div>
  <input type="button" value="test" @click="change">
</div>

<script src="vue.js"></script>
<script>
  //实例化一个子组件,test是子组件的名字,template是子组件的写法
  Vue.component('test',{
    template:'<div>子组件-<span @click="add">{{number}}</span></div>',
    //子组件的data数据的写法
    data:function () {
      return{
        number:0
      }},
    methods:{
      add:function () {
        this.number++
      }
    }
  })
  new Vue({
    el:'#app',
    data:{
      count:0
    },
    methods:{
        change:function () {
          // 可以获取到当前页面的所有使用了refs的标签
          // console.log(this.$refs)
          // 将两个子组件写了ref标签-ref='a',那么$refs.a就是第一个组件
          // $ref.b就是b组件,$ref.b.number就能拿到b组件的number的值
          console.log(this.$refs.a.number)
          console.log(this.$refs.b.number)
          this.count = this.$refs.a.number+this.$refs.b.number
        }
    }
  })
</script>

c)、组件化时,如果一个元素是由多个标签组成,内部的标签,想组件化不可以直接使用,需要用is属性指定组件

比如,表格就是多层级标签组成的,内部的行、列要使用组件,需要声明

    <table border="1">
        <thead>
            <th>id</th>
            <th>method</th>
            <th>状态</th>
        </thead>
        <tbody>
<!--            <tr-demo></tr-demo>-->
            <tr is="tr-demo"></tr>
        </tbody>
    </table>


    Vue.component('tr-demo',{
        template:'<tr><td>1</td><td>post</td><td>失败</td></tr>'
    })
    new Vue({
        el:'#app'
    })
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值