Vue学习(常用实例、脚手架搭建)-学习笔记

本文详细介绍了Vue.js的实用实例,包括导航目录的实现和多项选择功能的开发,同时讲解了Vue-cli2.0和4.0的脚手架搭建步骤,帮助读者快速入门并掌握现代前端开发流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue学习(常用实例、脚手架搭建)-学习笔记

附加:阿里巴巴矢量图库:https://www.iconfont.cn/
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实例1

法1
* {
    padding: 0px;
    margin: 0px;
}
ul {
    list-style-type: none;
}

a {
    color: #333;
    text-decoration: none;
}
body {
    font-size: 14px;
    background-color: #f9f9f9;
}
body,html{
    width:100%;
    height:100%;
}
.tree {
    width: 200px;
    height: 100%;
    background: #fff;
}
.tree> ul {
    height: 100%;
}
.p_title {
    color: #333;
    display: block;
    padding: 15px;  
    cursor:pointer;
    border-bottom: 1px solid #f1f1f1;
}
.selected {
    color: #1890ff;
    border-bottom: 1px solid #1890ff;
}
.p_title> i{
    padding-right:10px;
}
.p_title b{
    float: right;
    transition:all ease 1s;
}
.down {
    transform:rotate(180deg)
}
.up {
    transform:rotate(0deg)
}
.p_title:hover {
    color: #1890ff;
    border-bottom: 1px solid #1890ff;
}

.c_item a {
    display: block;
    padding: 10px 20px 10px 40px;
    background: #fff;
    color: #333;
    cursor:pointer;
}

.c_item a:hover {
    color: #1890ff;
    background: #e6f7ff;
    border-right: 4px solid #1890ff;
}
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"/>
	<title>导航目录</title>
	<link rel="stylesheet" type="text/css" href="css/index.css">
	<link rel="stylesheet" href="font/iconfont.css">
	<script src='js/vue.js'></script>
	<script src='js/index.js'></script>
</head>
<body>
	<div class="tree" id='my'>
		<ul>
			<li class="p_item" v-for="(v,i) in items" :key="i">
				<a class="p_title" @click="flagChange(v)" :class="v.flag?'selected':''">
					<i class="iconfont" :class="v.icon"></i>{{v.name}}
					<!-- <b v-show="!v.flag">^</b>
					<b v-show="v.flag">></b> -->
					<b :class="v.flag ?'down':'up'">^</b>
				</a>
				<ul class="c_item" v-show="v.flag">
					<li v-for="(sub,j) in v.subItems" :key="j">
						<a>{{sub.name}}</a>
					</li>
				</ul>
			</li>
		</ul>
   </div>
</body>
</html>
window.onload = function(){
    new Vue({
        el:"#my",
        data:{
            items:[
                {
                    name:'服饰类',
                    icon:'icon-shenghuo',
                    flag:true,
                    subItems:[
                        {name:'服饰类1'},
                        {name:'服饰类2'},
                        {name:'服饰类3'}
                    ]
                },
                {
                    name:'运动类',
                    icon:'icon-biaoqingleiben',
                    flag:false,
                    subItems:[
                        {name:'运动类1'},
                        {name:'运动类2'},
                        {name:'运动类3'}
                    ]
                }
            ]
        },
        methods:{
            flagChange(v){
               // v.flag = !v.flag;
               this.items.forEach(function(item){
                    item.flag = false;
               });
               v.flag  = true;
            }
        }
    })
}
法2
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"/>
	<title>导航目录</title>
	<link rel="stylesheet" type="text/css" href="css/index.css">
	<link rel="stylesheet" href="font/iconfont.css">
	<script src='js/vue.js'></script>
	<script src='js/axios.js'></script>
	<script src='js/index2.js'></script>
</head>
<body>
	<div class="tree" id='my'>
		<ul>
			<li class="p_item" v-for="(v,i) in items" :key="i">
				<a class="p_title" @click="n=i" :class="n==i?'selected':''">
					<i class="iconfont" :class="v.icon"></i>{{v.name}}
					<b :class="n==i?'down':'up'">^</b>
				</a>
				<ul class="c_item" v-show="n==i">
					<li v-for="(sub,j) in v.subItems" :key="j">
						<a>{{sub.name}}</a>
					</li>
				</ul>
			</li>
		</ul>
   </div>
</body>
</html>
window.onload = function(){
    new Vue({
        el:"#my",
        data:{
            n:1,
            items:[
                {
                    name:'服饰类',
                    icon:'icon-shenghuo',
                    subItems:[
                        {name:'服饰类1'},
                        {name:'服饰类2'},
                        {name:'服饰类3'}
                    ]
                }
            ]
        },
        methods:{
            getData(){
                axios({
                    method:'get',
                    url:'http://127.0.0.1:3333/get_lists'
                }).then(res=>{
                    console.log(res);
                    this.items = res.data.result;
                }).catch(function(){

                })
            }
        },
        mounted(){
            this.getData();
        }
    })
}

实例2

* {
    padding: 0px;
    margin: 0px;
}
ul {
    list-style-type: none;
}
a {
    text-decoration: none;
}
body,html{
    width:100%;
    height:100%;
}
.panel-height {
    height: 310px;
    overflow-y: scroll;
}
.panel-height li {
    cursor:default;
    background: #f9f9f9;
    display: inline-block;
    border: 1px solid #d6e9c6;
    margin: 5px;
    padding: 5px 15px;
    position:relative;
}
.panel-height li:hover {
    border: 1px solid #3c763d;
}
.panel-height li span.del{
    position:absolute;
    color:#999;
    right:3px;
    top:-3px;
} 
.panel-height li span.del:hover{
    color:#f60;
} 
.panel-height li.selected {
    color:#f60;
    background: #d6e9c6;
    border: 1px solid #3c763d;
}
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"/>
	<title>多项选择框</title>
	<link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
	<link rel="stylesheet" type="text/css" href="css/index.css">
	<script src='js/vue.js'></script>
	<script src='js/index.js'></script>
</head>
<body>
	<div id='my'>
		<div class="container"> 
			<div class="row">
				<!--左侧所有省份-->
				<div class="col-xs-6 col-sm-6" >
					<div class="panel panel-success">
						<!--标题-->
						<div class="panel-heading">
							<h3 class="panel-title">省份({{leftData.length}}) / 当前选中({{rightData.length}})</h3>
						</div>
						<!--内容-->
						<div class="panel-body panel-height">
							<ul>
								 <li  v-for="(v,i) in leftData" 
									 :key="v.id"
									 :class="v.flag?'selected':''"
									 @click="add(v)">{{v.name}}</li>
							</ul>
						</div>
					</div>
				</div>
				<!--右侧选中省份-->
				<div class="col-xs-6 col-sm-6" >
					<div class="panel panel-success">
						<!--标题-->
						<div class="panel-heading">
							<h3 class="panel-title">已选择省份({{rightData.length}})</h3>
						</div>
						<!--内容-->
						<div class="panel-body panel-height">
							<ul >
								<li v-for="(v,i) in rightData" 
								:key="v.id"
								@mouseover="state=i"
								@mouseout="state='hide'"
								>{{v.name}}
									<span class="del" v-show="state==i" @click="del(v,i)">x</span>
								</li>
							</ul>
						</div>
					</div>
				</div>  
			</div>
		</div>
   </div>
	
</body>
</html>
window.onload = function(){
    new Vue({
        el:"#my",
        data:{
            n:1,
            leftData:[
                {name:'北京1',id:1,flag:false},
                {name:'北京2',id:2,flag:false},
                {name:'北京3',id:3,flag:false},
                {name:'北京4',id:4,flag:false},
                {name:'北京5',id:5,flag:false},
                {name:'北京6',id:6,flag:false},
                {name:'北京7',id:7,flag:false},
                {name:'北京8',id:8,flag:false},
                {name:'北京9',id:9,flag:false}
            ],
            rightData:[
            ],
            state:'hide' //显示与隐藏
        },
        methods:{
            add(v){  //添加数据
                v.flag = true;
                //去重
                // for(var i=0;i<this.rightData.length;i++){
                //     if(v.id == this.rightData[i].id) return;
                // };
                this.rightData.push(v);
                this.rightData  = [...new Set(this.rightData)];
            },
            del(v,i){
                this.rightData.splice(i,1);
                this.leftData.forEach(item=>{
                    if(v.id == item.id){
                        item.flag = false;
                    }
                })
            }
        }
    })
}

脚手架搭建

vue-cli2.0

需要先了解:

Html
Css
Javascript
Node.js 环境(npm包管理工具)
Webpack 自动化构建工具

一、安装node.js

进入官网下载node.js : https://nodejs.org/en/
在这里插入图片描述
二、安装 cnpm

1、说明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等);
2、使用npm安装插件:命令提示符执行npm install
3、选装 cnpm 因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事!来自官网:“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。”;

安装:npm install -g cnpm --registry=https://registry.npm.taobao.org
输入cnpm -v,可以查看当前cnpm版本

三、安装vue-cli脚手架构建工具

vue-cli 提供一个官方命令行工具,可用于快速搭建大型单页应用。该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程。只需几分钟即可创建并启动一个带热重载、保存时静态检查以及可用于生产环境的构建配置的项目:
安装:$ cnpm install vue-cli –g //g表示全局安装
安装完成之后输入 vue -V(注意这里是大写的“V”),如下图,如果出现相应的版本号,则说明安装成功。
在这里插入图片描述
四、创建一个基于webpack模板的新项目

要创建项目,首先我们要选定目录,然后再命令行中把目录转到选定的目录。可以使用:

$ vue init webpack my-app      // my-app为自定义项目名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行初始化命令的时候回让用户输入几个基本的选项,如项目名称,描述,作者等信息,如果不想填直接回车默认就好

Project name (my-app) # 项目名称(我的项目)
Project description (A Vue.js project) # 项目描述一个Vue.js 项目
Author 作者(你的名字)
Install vue-router? (Y/n) # 是否安装Vue路由,也就是以后是spa(但页面应用需要的模块)
Use ESLint to lint your code? (Y/n) # 使用 ESLint 到你的代码? (Y [ yes ] / N [ no ])
Pick an ESLint preset (Use arrow keys) # 选择一个预置ESLint(使用箭头键)
Setup unit tests with Karma + Mocha? (Y/n) # 设置单元测Karma + Mocha? (Y/ N)
Setup e2e tests with Nightwatch? (Y/n) # 设置端到端测试,Nightwatch? (Y/ N

注:当然这些都看你自己个人的情况

五、运行项目

$ cnpm run dev

运行成功后,浏览器直接显示的是页面如下:
在这里插入图片描述
六、安装项目所需要的依赖
刚初始化的项目是没有依赖的,如果运行会报类似这样的错误,输入命令

$ cnpm install
vue-cli4.0

三、安装vue-cli脚手架构建工具

vue-cli 提供一个官方命令行工具,可用于快速搭建大型单页应用。

1、先确认是否有安装过vue-cli
vue -V //如有的话,就用下面命令卸载
在这里插入图片描述
输入命令 : cnpm install -g @vue/cli
在这里插入图片描述
在这里插入图片描述
指定版本:
如是3.0以下

npm install -g vue-cli@版本号

如是3.0以上

npm install -g @vue/cli@版本号

四、创建项目

vue create 项目名称

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
空格选择对应需要的插件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
五、启动项目

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值