我的vue之旅

1-Vue入门

官网:https://cn.vuejs.org/
1.可以引入CND
2.可以下载vue.js 引入
3.使用vue-cli
具体内容参考上面的网址即可,官网都有。

参照官网下载相关安装npm,vue-cli,生成Demo.

在这里插入图片描述
在这里插入图片描述
运行
在这里插入图片描述

2-Vue基础语法

2-0 模板

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
		</div>
	</body>
	<script>
		new Vue({
			el: '#app',
		})
	</script>
</html>

2-1创建第一个Vue实例

使用 new vue 去创建一个实例,让这个实例去接管页面中的某一个部分,由el决定。在上面的html中,el: 接管页面上的哪一个element,在截图中接管的是id为app的div

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
			<p>{{ message }}</p>
			<p>{{ chenhui }}</p>
		</div>
	</body>
	<script>
		// 创建一个实例,这个实例会接管页面上的某一个部分。
		// el :所在实例会接管 id 为 app的dom节点 。el节点会与哪一个dom节点绑定
		// data :message 为 key ,'Hello Vue.js!' 为值
		/**
		 *  在接管的dom中 {{ message }} 显示
		 */
		new Vue({
			el: '#app',
			data: {
				message: 'Hello Vue.js!',
				chenhui: 'nullchen'
			}
		})
	</script>
</html>

2-2挂载点、模板与实例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
        <!--挂载点、模板、实例之间的关系-->
		<div id="app">    <!-- 这个div标签成为 vue实例的挂载点,vue只会处理挂载点下的内容-->
            <!--在挂载点内部的内容称为模板-->
            <a>{{ chenhui }}</a>
		</div>
	</body>
	<script>
        //实例
		new Vue({
            el: '#app',
            template: "<a>{{message}}</a>",  //模板, 如果执行了模板,那么只会显示模板中的内容 比如说上面 <a>{{ chenhui }}</a> 将不会有任何的显示
			data: {
				message: 'Hello Vue.js!',
				chenhui: 'nullchen'
			}
		})
	</script>
</html>

2-3Vue实例中的数据、事件和方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
        <!-- 数据、事件 和方法-->
        <!--
             {{ chenhui }} 插值表达式
             会将data 中key为chenhui的value显示出来
        -->
        <!--
            数据
            v-text="chenhui" 将chenhui以文本的方式显示
            v-html="chenhui" 将chenhui处理成HTML语法显示
        -->
        <!--
            事件的绑定 例如click
            v-on:click="singleClick"
            当被点击的时候会触发绑定的方法,该方法在vue实例中定义  methods
        -->
        <!--
            方法  在methods中定义
        -->
		<div id="app"> 
            <h1>hello {{ chenhui }}</h1>
            <h1 v-text="chenhui"></h1>
            <h1 v-html="chenhui"></h1>
            <h1 v-on:click="singleClick">{{ message }}</h1>
		</div>
	</body>
	<script>
		new Vue({
            el: '#app',
			data: {
				message: 'Hello Vue.js!',
				chenhui: '<a style="background: gold;">金闪闪</a>'
            },
            methods:{
                singleClick:function () {
                    alert("你点击了"+this.message);
                    this.message = "你很帅。";
                }
            }
		})
	</script>
</html>

在这里插入图片描述
在这里插入图片描述

2-4Vue中的属性绑定和双向数据绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
            <!-- 属性绑定
                如果 title 不存在,就会出错
                只要使用了模板执行,那么 = 后面 就不在是一个字符串了
                而是一个表达式了
            -->
            <div v-bind:title="'你好'+title">Hello world</div>
            <!-- 双向数据绑定
                v-model 模板执行会影响 content
            -->
            <input v-model:value="content" />
            <div>{{ content }}</div>
		</div>
	</body>
	<script>
		new Vue({
            el: '#app',
            data:{
                title:"this is a good job ~",
                content:"sss"
            }
		})
	</script>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2-5Vue中的计算属性和侦听器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
            <input v-model:value='fName'/>
            <input v-model:value='lName'/>
            <div>{{fName}} {{lName}}</div>
            <!-- 
                计算属性
                性能比较高,缓存,只有其中一个发生变化时才会去计算-->
            <div>{{fullName}}</div>
            <!-- watch 侦听器,
                监听fName和lName的属性值变化,每发生一次改变就会
                count+1
            -->
            <div> {{ count }}</div>
		</div>
	</body>
	<script>
		new Vue({
            el: '#app',
            data:{
                fName:'',
                lName:'',
                count:0
            },
            computed:{
                fullName: function(){
                    return this.fName+this.lName;
                }
            },
            watch: {
                fName:function(){
                    this.count++;
                },
                lName:function(){
                    this.count++;
                }
            }
		})
	</script>
</html>

在这里插入图片描述
在这里插入图片描述

2-6 v-if v-show v-for

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
            <!-- v-if 的使用 
             点击按钮 hello world 会隐藏  隐藏点击会显示
             操作的是dom 标签 会删除 在添加
            -->
            <div v-if="show">hello world</div>
            <button v-on:click="singleClick">toggle</button>
            <!--
                v-show
                会给此标签添加 display:none
                所以 在需要显示隐藏 显示隐藏的操作上尽量使用v-show
                可通过F12查看 HTML中标签的变化
            -->
            <div v-show="show">hello world</div>
            <button v-on:click="singleClick">toggle</button>
            </br>
            <!--
                v-for
                循环展示数组中的内容
                index 唯一
            -->
            <div v-for="(item,index) of numlist" v-bind="index">{{ item }}</div>

             <!--
                v-for
                循环展示数组中的内容, 当input框中输入一个内容时 或被添加到 numlist中
                index 唯一
            -->
            <input v-bind:value="content" v/>
            <div v-for="(item,index) of numlist" v-bind="index">{{ item }}</div>
		</div>
	</body>
	<script>
		new Vue({
            el: '#app',
            data:{
                show:true,
                numlist:[1,2,3,5],
                content:''
            },
            methods:{
                singleClick:function(){
                    this.show = !this.show;
                }
            }
		})
	</script>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3-Vue中的组件

3-0 模板

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
		</div>
	</body>
	<script>
		new Vue({
			el: '#app',
		})
	</script>
</html>

3-1 todolist功能开发

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
            <!--
                输入内容点击提交的时候,输入的内容会被显示到ul中
            -->
            <input v-model:value="inputvalue"/>
            <button v-on:click="addClick">提交</button>
            <ul>
                <li v-for="(item,index) of numlist " v-bind:key="index" >
                {{ item }},{{ index }}
                </li>
            </ul>
		</div>
	</body>
	<script>
		new Vue({
            el: '#app',
            data:{
                inputvalue:'',
                numlist:[]
            },
            methods:{
                addClick:function(){
                    this.numlist.push(this.inputvalue);
                    this.inputvalue = '';
                }
            }
		})
	</script>
</html>

在这里插入图片描述

3-2 todolist组件拆分

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
            <!--
                输入内容点击提交的时候,输入的内容会被显示到ul
                
                全局组件
                局部组件
                将此部分拆分成一个组件
                <li v-for="(item,index) of numlist " v-bind:key="index" >
                {{ item }},{{ index }}
                </li>
            -->
            <input v-model:value="inputvalue"/>
            <button v-on:click="addClick">提交</button>
            <ul>
               <todo-item></todo-item>         
            </ul>
            <ul>
                    <todo-item-child v-for="(item,index) of numlist " v-bind:key="index"
                        v-bind:content="item + 'chenhui'"
                    ></todo-item-child>         
            </ul>
            <ul>
                <li v-for="(item,index) of numlist " v-bind:key="index" >
                {{ item }},{{ index }}
                </li>
            </ul>
		</div>
	</body>
	<script>
         //全局组件的模板
        Vue.component('todo-item',{
            template:'<li>这是我拆分出来的全局组件,在任何的模板里面都可以使用</li>'
        })
        //局部组件的模板  需要传递参数 不能直接使用content 
        var TOdoItem = {
            props:['content'],   //传递的参数
            template:'<li>{{content}}</li>'
        }
		new Vue({
            el: '#app',
            components:{
                'todo-item-child':TOdoItem
            },
            data:{
                inputvalue:'',
                numlist:[]
            },
            methods:{
                addClick:function(){
                    this.numlist.push(this.inputvalue);
                    this.inputvalue = '';
                }
            }
		})
	</script>
</html>

在这里插入图片描述
在这里插入图片描述

3-3 组件与实例的关系

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app"> <!--挂载点-->
            <!--
                输入内容点击提交的时候,输入的内容会被显示到ul
                
                全局组件
                局部组件
                将此部分拆分成一个组件
                <li v-for="(item,index) of numlist " v-bind:key="index" >
                {{ item }},{{ index }}
                </li>
            -->
            <input v-model:value="inputvalue"/>
            <button v-on:click="addClick">提交</button>
            <ul>
               <todo-item></todo-item>         
            </ul>
            <ul>
                    <todo-item v-for="(item,index) of numlist " v-bind:key="index"
                        v-bind:content="item + 'chenhui'"
                    ></todo-item>         
            </ul>
            <ul>
		</div>
	</body>
	<script>
         //全局组件的模板  每一个vue的组件都是一个vue的实例
        Vue.component('todo-item',{
            props:['content'],
            template:'<li v-on:click="clicked"> {{ content }}</li>',
            //证明组件也是一个实例
            methods:{
                clicked:function(){
                    alert("你点击了Vue");
                }
            }
        })
		new Vue({
            el: '#app',
            data:{
                inputvalue:'',
                numlist:[]
            },
            methods:{
                addClick:function(){
                    this.numlist.push(this.inputvalue);
                    this.inputvalue = '';
                }
            }
		})
	</script>
</html>

在这里插入图片描述
在这里插入图片描述

3-4 实现todolist的删除功能

<!DOCTYPE html>
<html>
	<head>
		<meta charset="gb2312">
		<title>Insert title here</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app"> <!--挂载点-->
           <!--删除-->
            <input v-model:value="inputvalue"/>
            <button v-on:click="addClick">提交</button>
            <ul>
                    <todo-item v-for="(item,index) of numlist " v-bind:key="index"
                        v-bind:content="item + 'chenhui'+ index "
                        v-bind:bottomindex="index" 
                        v-on:delete="deleteEle" 
                    ></todo-item>
                    <!--父组件 监听delete事件,执行deleteEle-->         
            </ul>
            <ul>
		</div>
	</body>
	<script>
        Vue.component('todo-item',{
            props:['content','bottomindex'],
            template:'<li v-on:click="clicked"> {{ content }}</li>',
            methods:{
                //发布订阅模式  向外触发,并且传递了参数index
                clicked:function(){
                    this.$emit('delete',this.bottomindex) ;
                }
            }
        })
		new Vue({
            el: '#app',
            data:{
                inputvalue:'',
                numlist:[]
            },
            methods:{
                addClick:function(){
                    this.numlist.push(this.inputvalue);
                    this.inputvalue = '';
                },
                deleteEle:function(bottomindex){
                    alert('delete'+bottomindex);
                    this.numlist.splice(bottomindex,1);
                }
            }
		})
	</script>
</html>

在这里插入图片描述

4 Vue-cli的使用

在这里插入图片描述

Demo地址:自己的Demo和vue-cli生成的Demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值