Vue.js学习笔记

vue.js

  • 考虑这个需求: 我们要把一个 json对象的数据,显示到一个元素上去。
  • 导入 vue.js 要用到的库: vue.min.js

基本语法

<script src="@{'/public/javascripts/vue.min.js'}" type="text/javascript"></script>
<body>
<div id="div1">{{data.name}}</div>
<script>
    var json={"name":"py"}
    new Vue({
        el:'#div1',
        data:{
            data:json
        }
    })
</script>

基本语法

监听事件v-on/@

代码示例

<div id="div1">
    点击{{times}}次
    <button @click="click">点击</button>
</div>

<script>
    new Vue({
        el:'#div1',
        data:{
            times:0
        },
        methods:{
            click:function () {
                this.times++;
            }
        }
    })
</script>

在这里插入图片描述
代码示例

事件修饰符

stop

事件修饰符 阻止冒泡 .stop

.prevent

事件修饰符 阻止提交 .prevent

注: 只有超链和form这种会导致页面刷新的操作,.prevent 才有用。 普通的不导致页面刷新的按钮,加上这个没有任何变化。

.capture

事件修饰符 优先触发 .capture

.self

事件修饰符 只有自己能触发,子元素无法触发.self

.once

事件修饰符 只能提交一次 .once

条件语句 v-if/v-else/v-if else

v-if

<div id="div1">
    <button @click="click">
        切换隐藏/显示
    </button>
    <div v-if="show">内容</div>
</div>
<script>
    new Vue({
        el:'#div1',
        data:{
            show:true
        },
        methods:{
            click:function () {
                this.show=!this.show;
            }
        }
    })
</script>

在这里插入图片描述

v-else

<div id="div1">
    <button @click="click">
        买彩票
    </button>
    <div v-if="show">中奖</div>
    <div v-else="show">谢谢惠顾</div>
</div>
<script>
    new Vue({
        el:'#div1',
        data:{
            show:true
        },
        methods:{
            click:function () {
                this.show=Math.random()<0.1;
            }
        }
    })
</script>

在这里插入图片描述

v-else-if

<div id="div1">
    <button @click="click">
        买彩票
    </button>
    <div v-if="show>70">中大奖</div>
    <div v-else-if="show>50">中奖</div>
    <div v-else>未中奖</div>
</div>
<script>
    new Vue({
        el:'#div1',
        data:{
            show:true
        },
        methods:{
            click:function () {
                this.show=Math.random()*100;
            }
        }
    })
</script>

在这里插入图片描述

循环语句 v-for

代码示例

<div id="div1">
    <table>
        <tr>
            <td>name</td>
            <td>hp</td>
        </tr>
        <tr v-for="hero in heros">
            <td>{{hero.name}}</td>
            <td>{{hero.hp}}</td>
        </tr>
    </table>
</div>
<script>
    var data = [
        {name:"盖伦",hp:341},
        {name:"提莫",hp:225},
        {name:"安妮",hp:427},
        {name:"死歌",hp:893}
    ];
    new Vue({
        el:'#div1',
        data:{
            heros:data
        },
    })
</script>

在这里插入图片描述

index索引用法v-for=" Object,index in LIst"

<div id="div1">
    <table>
        <tr>
            <td>name</td>
            <td>hp</td>
        </tr>
        <tr v-for=" hero,index in heros">
            <td>{{index}}</td>
            <td>{{hero.name}}</td>
            <td>{{hero.hp}}</td>
        </tr>
    </table>
</div>
<script>
    var data = [
        {name:"盖伦",hp:341},
        {name:"提莫",hp:225},
        {name:"安妮",hp:427},
        {name:"死歌",hp:893}
    ];
    new Vue({
        el:'#div1',
        data:{
            heros:data
        },
    })
</script>

在这里插入图片描述

纯数字遍历

还是需要Vue声明范围

<div id="div1">
    <div v-for="index in 10">{{index}}</div>
</div>
<script>
    new Vue({
        el:'#div1'
    })
</script>

在这里插入图片描述

属性绑定

v-bind

<a v-bind:href="page"百度

<div id="div1">
    <a v-bind:href="page">百度</a>
</div>
<script>
    new Vue({
        el:'#div1',
        data:{
            page:'http://www.baidu.com'
        }
    })
</script>

在这里插入图片描述

简写 V-bind:href="" ->:herf=""

<a v-bind:href="page"http://12306.com>

双向绑定

v-model

<div id="div1">
    <input type="text" v-model="name"><br>
    <button @click="look">查看</button>
</div>
<script>
    new Vue({
        el:'#div1',
        data:{
            name:''
        },
        methods:{
            look:function () {
                alert(this.name)
            }
        }
    })
</script>

在这里插入图片描述

.lazy

v-model.lazy=“xxx”
对于输入元素,默认的行为方式是一旦有数据变化,马上进行绑定。
但是加上.lazy之后,相当于监听change操作,只有在失去焦点的时候,才会进行数据绑定了

.number

v-model.number=“xxx”
有时候,拿到了数据需要进行数学运算, 为了保证运算结果,必须先把类型转换为number类型,而v-model默认是string类型,所以就可以通过.number方式确保获取到的是数字类型了。

.trim

v-model.trim=“xxx”
trim 去掉前后的空白

计算属性:computed

如果运算过程比较复杂,那么维护起来就比较麻烦。
{{ rmb/exchange }}

<div id="div1">
    汇率:<input v-model.number="exchange"><br>
    RMB:<input v-model.number="rmb"><br>
    $:{{dollar}}
</div>
<script>
  new Vue({
      el:'#div1',
      data:{
          exchange:6.4,
          rmb:0,
      },
      computed:{
          dollar:function () {
              return this.rmb/this.exchange;
          }
      }
  })
</script>

在这里插入图片描述
注:method 也能达到一样的效果,调用的时候,要加上括号
{{ getDollar() }}

computed 和 methods 的区别

computed 是有缓存的,只要rmb没有变化,dollar 会直接返回以前计算出来的值,而不会再次计算。 这样如果是复杂计算,就会节约不少时间。
而methods每次都会调用

watch

vue可以通过watch来监听属性值的变化。

<div id="div1">
    汇率:<input v-model.number="exchange" type="number"><br>
    RMB:<input v-model.number="rmb" type="number"><br>
    $:<input v-model.number="dollar" type="number"><br>
</div>
<script>
  new Vue({
      el:'#div1',
      data:{
          exchange:6.4,
          rmb:0,
          dollar:0
      },
      watch:{
          dollar:function (val) {
              this.dollar=val;
              this.rmb=this.exchange*this.dollar;
          },
          rmb:function (val) {
              this.rmb=val
              this.dollar=this.rmb/this.exchange;
          }
      }
  })
</script>

在这里插入图片描述

过滤器filter

{{data|fa|fb}}

<div id="div1">
    <input v-model="str">
    <div>{{str|fa|fb}}</div>
</div>
<script>
    new Vue({
        el:'#div1',
        data:{
            data:'',
        },
        filters:{
            fa:function(value) {
                if (!value) return '' //如果为空,则返回空字符串
                value = value.toString()
                return value.charAt(0).toUpperCase() + value.substring(1)
            },
            fb:function(value) {
                if (!value) return '' //如果为空,则返回空字符串
                value = value.toString()
                return value.substring(0,value.length-1)+ value.charAt(value.length-1).toUpperCase()
            }
        }
    })
</script>

在这里插入图片描述

全局过滤器

Vue.filter('fa', function (value) {
    if (!value) return ''
    value = value.toString()
    return value.charAt(0).toUpperCase() + value.slice(1)
})

组件&自定义指令&路由略

对于后端er,主要想学会vue传json渲染前端

vue的Ajax axios.js

需要引入axios.min.js
axios.js

<script>
    var url="/user"
    axios.get(url).then(function (value) {
    	//value.data是Object对象
        var json=JSON.stringify(value.data)
        document.getElementById('div1').innerHTML=json;
    })
</script>

等价于vue的axios

{{json}}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190418165833306.png) 异步请求 遍历json数组
<div id="div1">
<table>
    <tr>
        <td>name</td>
        <td>age</td>
    </tr>
    <tr v-for="j in json">
        <td>{{j.name}}</td>
        <td>{{j.age}}</td>
    </tr>
</table>
</div>
<script>
    new Vue({
        el:'#div1',
        data:{
            json:[],
        },
        mounted:function () {
            var self=this
            var url="/users"
            axios.get(url).then(function (value) {
                self.json=value.data;
            })

        }
    })
</script>

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值