Vue基础语法总结

目录

一、Vue的核心是:

二、Vue的CDN:

三、Vue常用属性:

v-if   v-else

v-else-if

v-for

v-on绑定事件,可简写为@

v-model数据双向绑定

输入框绑定

文本区域绑定

单选框绑定

select下拉框绑定

v-bind给组件绑定参数,简写为:

四、组件化:

组合组件slot插槽

组件内部绑定事件需要使用到this.$emit("事件名",参数);

计算属性的特色,缓存计算数据

五、网络通信 axios


一、Vue的核心是:

数据驱动+组件化

借鉴了AngularJS的模块化开发和React的虚拟Dom(虚拟dom就是把Dom操作放到内存中执行)。

二、Vue的CDN:

<!-- 导入vue.js -->

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

三、Vue常用属性:

  • v-if   v-else

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-if</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			<h1 v-if="ok">Yes</h1>
			<h1 v-else>No</h1>
		</div>
        <!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					ok: true
				}
			});
		</script>
	</body>
</html>

 

  • v-else-if

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-else-if</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			<h1 v-if="type==='A'">A</h1>
			<h1 v-else-if="type==='B'">B</h1>
			<h1 v-else-if="type==='C'">C</h1>
			<h1 v-else>D</h1>
		</div>
		<!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					type: 'A'
				}
			});
		</script>
	</body>
</html>

 

  • v-for

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			<li v-for="(item,index) in items">
				{
   
   {item.message}}----{
   
   {index}}
			</li>
		</div>
		<!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					items: [
						{message:'想这世界简单1'},
						{message:'想简单2'},
						{message:'想简单3'}
					]
				}
			});
		</script>
	</body>
</html>

  

  • v-on绑定事件,可简写为@

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue绑定事件</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			<button v-on:click="sayHi">click Me!</button>
		</div>
		<!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					message:"想这世界简单点"
				},
				methods: {//方法必须定义在Vue的Methods对象中,v-on:事件
					sayHi:function(event) {
						alert(this.message);
					}
				},
			});
		</script>
	</body>
</html>

 

  • v-model数据双向绑定

    • 输入框绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue数据双向绑定</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			输入文本:<input type="text" v-model="message">{
   
   {message}}
		</div>
		<!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					message:"123"
				}
			});
		</script>
	</body>
</html>

 

  • 文本区域绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue数据双向绑定</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			输入文本:<textarea rows="" cols="" v-model="message"></textarea>{
   
   {message}}
		</div>
		<!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					message:"123"
				}
			});
		</script>
	</body>
</html>

  • 单选框绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue数据双向绑定</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			性别:
			<input type="radio" value="男" v-model="pz">男
			<input type="radio" value="女" v-model="pz">女
			<p>选中了:{
   
   {pz}}</p>
		</div>
		<!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					pz:""
				}
			});
		</script>
	</body>
</html>

 

  • select下拉框绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue数据双向绑定select</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			下拉框:
			<select name="" id="" v-model="pz">
				<option value="" disabled>---请选择---</option>
				<option value="A">A</option>
				<option value="B">B</option>
				<option value="C">C</option>
			</select>
			<p>选中了:{
   
   {pz}}</p>
		</div>
		<!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					pz:""
				}
			});
		</script>
	</body>
</html>

 

  • v-bind给组件绑定参数,简写为:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue组件</title>
	</head>
	<body>
		<div id="app">
			<!--组件:传递给组件中的值:props -->
			<zzz v-for="item in items" v-bind:pppp="item"></zzz>
		</div>
		<!-- 导入vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
		<script>
			//定义一个Vue组件component
			Vue.component("zzz",{
				props:['pppp'],
				template: '<li>{
   
   {pppp}}</li>'
			});
			var vm=new Vue({
				el:"#app",
				data:{
					items:["Linux","Windows","ios"]
				}
			});
		</script>
	</body>
</html>

 

四、组件化:

  • 组合组件slot插槽

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>slot  内容分发</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			<todo>
				<todo-title slot="todo-title" :title="title"></todo-title>
				<todo-items slot="todo-items" v-for="item in todoItems" :item="item"></todo-items>
			</todo>
		</div>
		<script src="js/v2.6.10/vue.js"></script>
		<script>
			<!--slot:插槽-->
			Vue.component("todo",{
				template:'<diV>\
					<slot name="todo-title"></slot>\
					<ul>\
						<slot name="todo-items"></slot>\
					</ul>\
				</div>'
			}),
			Vue.component("todo-title",{
				props:['title'],
				template:'<div>{
   
   {title}}</div>'
			}),
			Vue.component("todo-items",{
				props:['item'],
				template:'<li>{
   
   {item}}</li>'
			})
			var vm=new Vue({
				el:"#app",
				data:{
					title:"想让这世界简单点",
					todoItems:[
						"java",
						"linux"
					]
				}
			});
		</script>
		<!--动态拔插-->
	</body>
</html>
  • 组件内部绑定事件需要使用到this.$emit("事件名",参数);

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>自定义事件</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			<todo>
				<todo-title slot="todo-title" :title="title"></todo-title>
				<todo-items slot="todo-items" v-for="(item,index) in todoItems" 
							:item="item" v-bind:index="index" v-on:remove1="removeItems(index)"></todo-items>
			</todo>
		</div>
		<script src="js/v2.6.10/vue.js"></script>
		<script>
			//slot:插槽
			Vue.component("todo",{
				template:'<diV>\
					<slot name="todo-title"></slot>\
					<ul>\
						<slot name="todo-items"></slot>\
					</ul>\
				</div>'
			}),
			Vue.component("todo-title",{
				props:['title'],
				template:'<div>{
   
   {title}}</div>'
			}),
			Vue.component("todo-items",{
				props:['item','index'],
				//只能绑定当前组件方法
				template:'<li> {
   
   {index}}------{
   
   {item}}<button @click="remove">删除</button></li>',
				methods:{
					remove:function(index){
						//remove1是自定义事件名
						//this.$emit  自定义分发事件
						this.$emit('remove1',index);
					}
				}
			})
			var vm=new Vue({
				el:"#app",
				data:{
					title:"想让这世界简单点",
					todoItems:["java","linux"]
				},
				methods:{
					removeItems:function(index){
						console.log("删除了"+this.todoItems[index]+"OK");
						this.todoItems.splice(index,1);//一次删除一个元素
					}
				}
			});
		</script>
		<!--动态拔插-->
	</body>
</html>
  • 计算属性的特色,缓存计算数据

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>计算属性</title>
	</head>
	<body>
		<!--view层 模板-->
		<div id="app">
			{
   
   {message}}
			<p>{
   
   {currentTime1()}}</p><!--调用方法-->
			<p>{
   
   {currentTime2}}</p><!--调用属性-->
		</div>
		<script src="js/v2.6.10/vue.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				<!-- Model : 数据-->
				data:{
					message:"Hello Vue!"
				},
				methods:{
					currentTime1:function(){
						return Date.now();//返回时间戳
					}
				},
				computed: {
					currentTime2:function() {//methods和computed里面的方法不能重名,重名之后只会调用methods中的方法
						this.message;
						return Date.now();//返回时间戳
					}
				},
			});
		</script>
		<!--调用方法时,每次都需要进行计算,既然有计算过程则必定会产生开销,那如果这个结果是不经常变化的呢?此时就可以考虑将这个结果缓存起来,采用计算属性可以很方便的做到这一点,计算属性的主要特性就是为了将不经常变化的计算结果缓存,以节约我们的系统开销-->
	</body>
</html>

遵循Soc关注度分离原则,Vue是纯粹的视图框架,并不包含,比如Ajax之类的通信功能,为了解决通信问题,我们需要使用Axios框架做异步通信。

五、网络通信 axios

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>axios</title>
	<!-- v-clock:解决闪烁问题-->
		<style>
			[v-clock]{
				display: none;
			}
		</style>
	</head>
	<body>
		<div id="app" v-clock>
			<div>
				{
   
   {info.name}}
			</div>
			<div>
				{
   
   {info.address.s}}
			</div>
			<a v-bind:href="info.url">点我跳转</a>
		</div>
		<script src="js/v2.6.10/vue.js"></script>
		<script src="js/v2.6.10/axios.js"></script>
		<script>
			var vm=new Vue({
				el:"#app",
				//data: 属性  vm
				data(){
					//请求的返回字符串格式,必须跟json字符串一样
					return{
						info:{
							name:null,
							author:null,
							address:{
								s:null,
								c:null
							}
						}
					}
				},
				mounted(){//钩子函数  链式编程  ES6新特性
					axios.get('package.json').then(response=>(this.info=response.data));
				}
			});
		</script>
	</body>
</html>
//json文件内容
{
  "name": "vue_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "author": "想让这世界简单点",
  "license": "ISC",
  "url":"https://www.baidu.com/",
  "address":{
	  "s":"山东",
	  "c":"济南"
  },
  "links":[
	  {
		 "url":"www.baidu.com",
		 "name":"姓名" 
	  },
	  {
	  		 "url":"www1.baidu.com",
	  		 "name":"姓名2" 
	  }
  ]
}

上面的这些东西仅仅是一些Vue的基础语法,能完成简单的单页应用,还不算真正的Vue开发。 

Vue开发都是基于Node.js,实际开发采用vue-cli脚手架开发,vue-router路由,vuex做状态管理;Vue UI,界面我们一般使用ElementUI(饿了么出品),或者ICE(阿里巴巴)来快速搭建前端项目。

猜你喜欢

转载自blog.csdn.net/pzcxl/article/details/131026081