vue 入门demo1

 
 
第一天接触vue,看着文档写点例子。给身为小白的自己留点痕迹。引入vue.min.js即可。都是基本应用。
1.computed属性

computed是vue对象的计算属性,与已有属性绑定依赖关系,可以与属性一起动态改变。

 
 
var cpu = new Vue({
    el:"#testDiv",
    data: {
        used : 0.2
    },
    computed:{
        unUsed:function() {
            return 1 - this.used;
        }
    }
})
//现在cpu这个对象相当于有used和unUsed2个属性,并且   二者之和为1;

computed没有set方法,但是可以手动添加。如下:

var cpu = new Vue({
    el:"#testDiv",
    data: {
        used : 0.2,
        unUsed:0.8
    },
    computed:{
        full: {
            set : function(newVal) {
                this.used = newVal;
                this.unUsed = 1-this.used;
            }
        }
    }
})
cpu.full = 0.6; //页面显示的数据为0.6和0.4.所以数据是更新成功的。

2.mastache表达式可以是简单的 js表达式,不能是  语句

{{message.split('').reverse().join('')}}
//输出的值是message的反转字符串
{{flag?'我是对的':'我是错的'}}  //如果data中flag是true则显示我是对的。   注意:这里的flag只能是vue对象的属性,不能是js的全局变量

3.v-for含有index的实例

<div id="objectX">
    <ul v-for="(p, index) in objectData">
	<li>{{p.name}}</li>
	<li>{{p.age}}</li>
	<li>{{p.sex}}</li>
        <li>{{index}}</li>
    </ul>
</div>
<script>
var userData = [{name:'john',age:15,sex:'1'},{name:'lulu',age:20,sex:'1'}];
var user = new Vue({
    el:'#objectX',
    data:{
       objectData:userData 
    }
})
</script> //截图如下

v-for和v-if同时使用。

 
 
<tr v-for="(relate, index) in channels" v-if='relate.channel_number'>
	<td v-if="relate.channel_number">{{index}}</td>
	<td v-if="relate.channel_number" :id="relate.channel_number">频道 {{relate.channel_number}}</td>
	<td v-if="relate.channel_number" class='sourceName' :id='relate.live_id'>{{relate.name}}</td>
	<td v-if="relate.channel_number"><img class='del' src='../img/dele-normal.png'></td>
</tr>
<tr v-else :style='{visibility:"hidden"}'> 
</tr>
//v-if可以使用v-for中的变量。配合v-else可以达到变量值不同显示不同的效果。


3.v-bind属性绑定

绑定class,可使用数组或者对象。*:class={class1:flag}后面是标志位,前面的是字符串。无论vue对象是否定义,都会转为字符串。如下面的例子,data中定义padding:‘vuewProp’.但第一个div的class仍然是padding。

<div id="bindDiv">
		<div :class="classObject" :style="[styleO,{'line-height':lineHeight}]">我是text-indext 我超长了布局应该怎么变化,左侧有文字么? 是有的</div>
		<div :class="{ padding: paddingFlag}">我是padding,我超长的布局如下所示。左侧有文字么? 没有的</div>
	</div>
//下面是js代码
var bindVue = new Vue({
    el:"#bindDiv",
    data:{
        paddingFlag:true,
        classObject: {
            indent : true
        },
        styleO : {
	    backgroundColor:'green',
	    fontSize:'18px'
        },lineHeight:'30px'
    }
})

4.绑定click并传入this。

通过在methods中定义函数,通过@click='fun($event)'可以传入this。代码如下,阻止递归。

<div id="parent" @click="parentClick" class="parentDiv">
    父元素
    <div id="child" @click="childClick($event)" class="childDiv">子元素</div>
</div>
methods :{ 
    /*阻止事件递归, $event是触发事件的本身(this)*/
    parentClick : function() {
        console.log("我是父元素的点击事件");
    },
    childClick : function(e) {
        e.stopPropagation();
        console.log("我是子元素的点击事件");
    }
}
//this通过$event传入。

5.表单元素通过v-model实现++双向++绑定

以select和checkbox为例。

<input type="checkbox" name="box" v-model="hobby" value="basketball" />篮球
<input type="checkbox" name="box" v-model="hobby" value="soccer" />足球
<input type="checkbox" name="box" v-model="hobby" value="tabletennis" />棒棒球
<span>{{hobby}}</span>
js:  data:{hobby:[]}

数组的顺序就是选择的顺序。

<select id="selectJob" multiple="true" v-model="job">
	<option value="lan">法师</option>
	<option value="bai">坦克</option>
	<option value="pao">小兵</option>
	<option value="boss">火龙</option>
</select>
<span>{{job}}</span>
js: data:{job:[]} //截图如下

修改vue对象的值,select选择也会发生相应的改变。因为关联是双向的。不过给input直接赋值不会触发值得改变。

可加入lazy,number,trim等修饰符。(eg:v-model.lazy.number.trim)

lazy是指触发事件改变,把input propertychange改为change事件。简单说就是把输入时处罚改为失去焦点触发。

trim是输入完成后去除前后空格。

number不是类型检测,是把input的内容转化为number,原本为字符串。

6.v-pre和v-cloak

v-pre是跳过vue编译,使编辑过程更快。v-cloak是编译完成前给元素添加的样式。需要添加到css中。[v-cloak]{}

**通过@import引入的css文件中的样式可能没有效果。因为资源加载先后的问题。所以要加在link引入的文件或者直接内联到html中。


猜你喜欢

转载自blog.csdn.net/id_no_chinese/article/details/80184064