目录
今天给大家分享一下,vue的基本语法模板,如果哪里不对的地方,欢迎大家指明。
使用{{msg}}的形式,标签将会被替换成为数据对象(data)上msg属性值,当绑定的数据对象上的msg属性值发生变化时,插值处(模型data)的值也会发生变化(双向绑定)
效果展示
HTML代码
- <div id="app">
- <h2>{{dog}},{{ts}}h2>
- <h1>{{6*8+1}}h1>
- <h1>{{test?'true':'false'}}h1>
- <h1>{{1*0?'1':'0'}}h1>
- <span>{{number+1}}span>
- <br />
- <span>{{dog.substr(0,5).toLocaleUpperCase()}}span>
- <p>
- <input type="text" v-bind:id="bookId"/>br>
-
- <input type="text" v-bind:id="'bookList_' + id"/>
- p>
- div>
vue代码
- <script>
- new Vue({
- el:"#app",
- data:function(){
- return{
- dog:"hello,vue",
- ts:new Date().getTime(),
- test:false,
- number:11,
- bookId: 'book001',
- id: 'book002'
- }
- },
- });
-
- script>
Vue里面的插值表达式(双花括号 { { }})是用来输出data数据的,定义在data里面的数据,可以使用插值表达式来输出:
例如: { { msg }}
1. 为什么双花括号能显示出真实的数据:因为 vue会拿到vue实例所控制DOM区域(#app)里面的标签 使用vue的语法去编译它
字面量
- <body>
- <div id="box">
- {{ 'abc' }}
- {{ 123 }}
- div>
- body>
2.四则运算
- <body>
- <div id="box">
-
- {{ 1+2 }}
- {{ 'hello' + 'word!' }}
- {{ 10*2 }}
- div>
- body>
3.逻辑运算
- <body>
- <div id="box">
- {{ true&&false }}
- {{ true || false ' }}
- {{ !true }}
- div>
- body>
4.三目运算
- <body>
- <div id="box">
- <p>{{ 20 > 18 ? '成年' : '未成年' }}p>
- div>
- body>
5.全局函数
- <body>
- <div id="box">
- <p>{{ Math.random() }}p>
- <p>{{ parseInt(12.23) }}p>
- div>
- body>
{{}}插值的方式将数据处理为普通文本,如果要输出html,需要使用v-html指令
示例:
在data中定义一个html属性,其值为html
- data: {
- html: ''
- }
在html中取值
<span v-html="html"></span>
点击getSelected事件时,设置为蓝色。
- <style>
- .redClass{
- text-align-last: center;
- color: red;
- }
- .blueClass{
- text-align-last: center;
- color: blue;
- }
- style>
- <p>设置之前: 阿巴阿巴p>
- <p>设置之后: <span v-bind:class="calzz">阿巴阿巴span>p>
- <button @click="changColor()">点击改变颜色button>
vue代码
- <script>
- new Vue({
- el:"#app",
- data:function(){
- return{
- html:"",
- calzz:'redClass',
-
- }
- },
-
- methods:{
- changColor(){
- this.calzz='blueClass'
- }
- }
-
- });
- script>
根据其后表达式的bool值进行判断是否渲染该元素, 指令特性的值预期是单个 JavaScript 表达式
效果展示
示例:
HTML
- <div v-if="type === 'A'">
- type == A
- div>
- <div v-else-if="type === 'B'">
- type == B
- div>
- <div v-else>
- other value
- div>
vue代码,可以修改data中的type值观察页面的输出。
- var vm = new Vue({
-
- el: '#app',
-
- data: {
- type: 'C'
- }
- });
注: js = == === 之间的区别
一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false
alert(1 == “1”); // true
alert(1 === “1”); // false
如果show值为false,就不会渲染其身后表达式,而且会给这样的元素添加css代码:style="display:none"。
当v-show 表达式true则显示,否则不显示。
注意:使用v-show,虽然不显示,但在页面的dom中是存在的,只是display属性为none
HTML代码
- <div v-show="show === 'yes'">
- show == yes
- div>
在data中定义show属性
- var vm = new Vue({
- el: '#app',
- data: {
- show: 'yes'
- }
- });
效果展示
循环遍历
- 遍历数组: v-for="item in items", items是数组,item为数组中的数组元素
- 遍历对象: v-for="(value,key,index) in stu", value属性值, key属性名,index下标
HTML代码
- <div id="app">
- <br>
- <div v-for="(item,index) in items" :value="item.id">
- {{index}} -- {{item.name}} -- {{item.id}}
- div>
-
- <br>
- <div v-for="(val,key) in obj">
- {{key}}-{{val}}
- div>
-
-
- <br>
- <div>
- <select >
- <option v-for="item in items" :value="item.id">{{item.name}}option>
- select>
- div>
- <br />
-
- <div v-for="(item,index) in items">
- {{index}}:<input type="checkbox" :value="item.id" v-model="selected">{{item.name}}
- div>
- <button v-on:click="getSelected()">获取选择button>
vue代码
- new Vue({
- el:"#app",
- data:function(){
- return{
- items:[
- {name: 'zs',id:18},
- {name: 'ww',id:19},
- {name: 'ls',id:20},
- {name: 'zl',id:21}
- ],
- obj: {
- name:'张三',
- age: 21,
- addr: '湖南长沙'
- },
- selected:[]
- }
- },
- methods:{
- getSelected(){
- console.log(this.selected);
- }
- }
- });
-
Vue为v-bind和v-on这两个最常用的指令,提供了特定简写
指令 简写 示例 v-bind:xxx :xxx v-bind:href 简写为 :href v-on:xxx @xxx v-on:click 简写为 @click
局部过滤器的定义:
- var vm = new Vue({
- filters: {
- 'filterName': function(value) {
- //过滤器实现
- }
- }
- });
全局过滤器 Vue.filter('fmtDate',function(value) { return fmtDate(value, 'yyyy年MM月dd日') });
注意事项:
- 注1:过滤器函数接受表达式的值作为第一个参数
- 注2:过滤器可以串联
{{ message | filterA | filterB }}- 注3:过滤器是JavaScript函数,因此可以接受参数:
{{ message | filterA('arg1', arg2) }}
效果展示
HTML代码
- <div id="app">
- <div v-for="(book,index) in books">
- <h1> {{index}} -- {{book.name}} -- {{book.price}}h1>
- div>
- <br>
- <div>
- <h1>总价:{{compTotal}}h1>
- div>
- div>
vue代码
- var vm = new Vue({
- el: '#app',
- data: {
- //定义测试数据
- books: [
- {name:'红楼梦', price:"120"},
- {name:'三国演义', price:"100"},
- {name:'水浒传', price:"90"},
- ]
- },
- //计算属性
- computed: {
- compTotal: function() {
- let sum = 0;
- for(index in this.books){
- sum+=parseInt(this.books[index].price)
- }
- return sum;
- }
- }
-
- });
使用场景:我们可以使用监听属性watch来响应数据的变量, 当需要在数据变化时执行异步或开销较大的操作时,比如,下拉列表的级联选择
实现数据的双向绑定,1m=100cm
示例: 米和厘米的单位换算
HTML中使用v-model实现与数据的双向绑定
- <div>
-
- 米: <input type="text" v-model="m">
- 厘米: <input type="text" v-model="cm">
- div>
vue代码
- var vm = new Vue({
-
- el: '#app',
-
- data: {
- m: 1,
- cm: 100
- },
-
- //设置监听属性
- watch: {
- m: function(val) {
- if(val)
- this.cm = parseInt(val) * 100;
- else
- this.cm = "";
- },
- cm: function(val) {
- if(val)
- this.m = parseInt(val) / 100;
- else
- this.m = "";
- }
- }
-
- });