Vue入门学习第一篇

       这是vue入门第一篇,这篇也是最基础的内容,把自己所学总结分享一下,主要介绍的是引用cdn使用vue以及常用指令。之后第二篇将是对vue-cli的介绍,再后期会把实践项目进行分享。

  • 对vue的理解

            vue是渐进式javascript框架,所谓渐进式,指的是没有太多的限制,对使用者要求少,使用起来灵活自由。相比起来,angular限制多,要求:必须使用它的模块机制- 必须使用它的依赖注入- 必须使用它的特殊形式定义组件。而vue可以使用优秀的库和框架,也可以很好的和其他项目或框架融合。

下面是在网上看到的一个关于渐进式非常好的理解,引用一下:

在我看来,渐进式代表的含义是:主张最少。
每个框架都不可避免会有自己的一些特点,从而会对使用者有一定的要求,这些要求就是主张,主张有强有弱,它的强势程度会影响在业务开发中的使用方式。
比如说,Angular,它两个版本都是强主张的,如果你用它,必须接受以下东西:
- 必须使用它的模块机制- 必须使用它的依赖注入- 必须使用它的特殊形式定义组件(这一点每个视图框架都有,难以避免)

所以Angular是带有比较强的排它性的,如果你的应用不是从头开始,而是要不断考虑是否跟其他东西集成,这些主张会带来一些困扰。

比如React,它也有一定程度的主张,它的主张主要是函数式编程的理念,比如说,你需要知道什么是副作用,什么是纯函数,如何隔离副作用。它的侵入性看似没有Angular那么强,主要因为它是软性侵入。

Vue可能有些方面是不如React,不如Angular,但它是渐进的,没有强主张,你可以在原有大系统的上面,把一两个组件改用它实现,当jQuery用;也可以整个用它全家桶开发,当Angular用;还可以用它的视图,搭配你自己设计的整个下层用。你可以在底层数据逻辑的地方用OO和设计模式的那套理念,也可以函数式,都可以,它只是个轻量视图而已,只做了自己该做的事,没有做不该做的事,仅此而已。
渐进式的含义,我的理解是:没有多做职责之外的事。

  • 引用cdn:打开官网,查看引入cdn的方式。

           

  • 常用指令知识点总结

            1.初始化vue对象后结构:                

// 实例化vue对象
var obj = new Vue({
	el:"#vue-app",    //el:element 需要获取的元素,一定是html中的根容器元素.
	data:{            //data:用于数据的存储
		
	},
	methods:{	     //methods:用于存储各种方法
		
	},
	computed:{
		
	}              
});

            2.v-html:                   

//HTML
<a v-bind:href="website">百度一下</a>                //绑定跳转链接
<p v-html="websiteTag"></p>                    //a标签,注意这里直接{{websiteTag}}是不可以的

//script
data:{          
	website:"http://www.baidu.com",
	websiteTag:"<a href='http://www.baidu.com'>百度</a>"
}

            3. v-bind:给属性绑定对应的值。动态地绑定一个或多个特性,或一个组件 prop 到表达式.

             4.v-model:实现数据的双向绑定

//HTML

<!--v-model已经实现input和name的双向数据绑定-->
<label>姓名:</label><input type="text" v-model="name">
<span>{{name}}</span>
<label>年龄:</label><input type="text" v-model="age">
<span>{{age}}</span>


<!--实现绑定的另一种方法,使用了$refs-->
//HTML
<label>姓名:</label><input type="text" v-on:keyup="logName" ref="name">
<span>{{name}}</span>
<label>年龄:</label><input type="text" v-on:keyup="logAge" ref="age">
<span>{{age}}</span> 

//script
methods:{		
	logName:function(){	
		this.name = this.$refs.name.value;	
	},
	logAge:function(){	
		this.age = this.$refs.age.value;
	}
	
}



            5.v-for: 对数组进行列表渲染.           

//HTML
<ul>
	<li v-for="character in characters">{{character}}</li>
</ul>

<ul>
	<!-- <li v-for="user in users">{{user.name}}:{{user.age}}</li> -->
	<li v-for="(user,index) in users">{{index+1}}.{{user.name}}:{{user.age}}</li>
</ul>

//script
data:{
   	characters:["sw","ma","ed"],
	users:[
		{name:"tt",age:"20"},
		{name:"dd",age:"22"},
		{name:"wf",age:"21"}
	]
}

          扩展: template显示的dom结构没有多于的div,只有h3和p标签,而第一段代码有多于的div,其实性能是不好的。

<div v-for="(user,index) in users">
	<h3>{{index}}.{{user.name}}</h3>
	<p>Age - {{user.age}}</p>
</div> 

<template v-for="(user,index) in users">
	<h3>{{index}}.{{user.name}}</h3>
	<p>Age - {{user.age}}</p>
</template>

             6.v-show:是对display的切换,dom一直存在,满足条件显示,否则隐藏。

             7.v-if:显示时dom存在,不显示即没有dom。

//error和success初始值都为false
<button @click="error=!error">Toggle Error</button>
<button @click="success=!success">Toggle Success</button>

<p v-if="error">网络链接错误:404</p>
<p v-else-if="success">网络链接成功:200</p>

<p v-show="error">网络链接错误:404</p>
<p v-show="success">网络链接成功:200</p>

             v-if截图:

            v-show截图:

         8.事件处理:

        (1)v-on:click/@click:

//HTML 
<button @click="add(1)">单击加一岁</button>
<button @click.once="add(1)">只能点一次加一岁</button>
<button v-on:click="substract(1)">单击减一岁</button>
<button @dblclick="add(5)">双击加五岁</button>
<button v-on:dblclick="substract(5)">双击减五岁</button>
<p>My age is {{old}}</p>

//script
new Vue({
	el:"#vue-app", 
	data:{         
		old:22
	},
	methods:{		
		add:function(inc){
			this.old += inc ;        //使用data中的属性直接this.属性即可
		},
		substract:function(dec){
			this.old -= dec;
		}
   }
})

           (2)v-on:mousemove以及事件修饰符:

//HTML
<!--实现移动鼠标获取x和y位置,显示在canvas内,移动到Stop Moving位置不变化效果 -->
<div id="canvas" v-on:mousemove="updateXY">    
	{{x}},{{y}} - 
	<!-- <span v-on:mousemove="stopMoving">Stop Moving</span> -->   //调用方法阻止冒泡事件
	<span v-on:mousemove.stop="">Stop Moving</span>    //利用修饰符直接使用.stop达到同样效果
</div>


//效果:点击后执行alert方法,不跳转百度网页,如果没有prevent则先执行方法后跳转网页。
<a v-on:click.prevent="alert" href="http://www.baidu.com">百度</a>

//script
methods:{		
	updateXY:function(event){
	    // console.log(event)
		this.x = event.offsetX;
		this.y = event.offsetY;
	},
	stopMoving:function(event){
		event.stopPropagation();
	},
	alert:function(){
		alert("hello");
	}
}

          (3)键盘事件:

//HTML
<!--按下enter才会执行logName方法 -->
<label>姓名:</label><input type="text" v-on:keyup.enter="logName">
<!--同时按下enter和alt才会执行logAge方法 -->
<label>年龄:</label><input type="text" v-on:keyup.alt.enter="logAge">

//script
methods:{	

	logName:function(){
	    console.log("正在输入名字...");
	},
	logAge:function(){
		console.log("正在输入年龄...");
	}
}

          9.class和style绑定:class的显示与否取决于后面的true和false。

<h4 v-bind:class="{red:true,blue:true}">示例1</h4>

结果渲染如下:

传入多个属性动态切换class,在computed中设置:

<h4>示例2</h4>
<button @click="changeColor=!changeColor">change color</button>
<button @click="changeLength=!changeLength">change length</button>
<div v-bind:class="compClasses">
	<span>henry</span>
</div>
computed:{
	compClasses:function(){
		return {
			changeColor:this.changeColor,
			changeLength:this.changeLength
		}
	}
}          

         10.多个实例化对象的初始化,修改第一个的属性时可以在第二个里面直接修改。

//HTML 两个根容器
<div id="vue-app-one">
	<h2>{{title}}</h2>
</div>
<div id="vue-app-two">
	<h2>{{title}}</h2> 
    <button @click="changeTitle">修改app-one的标题</button>
</div>

//script  两次初始化,多个类似
var one = new Vue({
	el:"#vue-app-one",
    data:{
       title:'这是app-one的内容'
    },
    methods:{

    }
})
var two = new Vue({
	el:"#vue-app-two",
    data:{
       title:'这是app-two的内容'
    },
    methods:{
       changeTitle:function(){
          one.title = "app-one的标题已经被改变了!";        //在第二个中修改第一个
       }
    }
})

two.title = 'app-two的标题也发生改变了!';              //修改app-two标题

        11.vue组件:

//HTML
<h2>vue组件</h2>
<div id="vue-app-one">
	<greeting></greeting>
</div>
<div id="vue-app-two">
	<greeting></greeting>
</div>

//script
Vue.component("greeting",{
	template:"<p>{{name}}:hello,介绍vue组件<button @click='changeName'>改名字</button></p>",
	data:function(){
		return {
			name:'tt'
		}
	},
	methods:{
		changeName:function(){
			this.name = 'henry';
		}
	}
})

new Vue({
	el:"#vue-app-one"
})
new Vue({
	el:"#vue-app-two"
})

                                                  点击后:   

        12.{{方法()}}调用方法时,不加()没法识别;而在事件调用方法时,可以不加(),需要传参数要加()。

        13.计算属性:

methods中有多个方法时,点击一个按钮方法都会执行,消耗大。此时可以使用computed,用于变化幅度大,耗时和大量搜索,实际上操作虚拟dom,就会达到点击某个只执行某个方法。

 computed:

猜你喜欢

转载自my.oschina.net/GracefulTing/blog/1793429