B062-组件 路由 属性扩展 webpack Vue-cli

news2024/9/23 23:34:31

目录

      • 一:组件
        • 1.何为组件
        • 2.组件的定义方式
          • 全局组件
          • 局部组件
        • 3.组件的注意事项
        • 4.template的定义方式
        • 5.组件获取数据的方式
      • 二:路由
        • 1.什么是路由?
        • 2.路由的使用步骤
      • 三:Vue属性扩展
        • 1.计算属性 computed和监听属性 watch
        • 3.钩子函数 mounted(){} 页面加载完成触发
      • 四:webpack打包
        • 作用:
        • 安装
        • 打包js和css
        • 如果是打包css
        • 使用webpack运行项目(重要)
      • 五:Vue-cli 脚手架 必须搞定
        • 搭建脚手架
        • 脚手架运行流程

创建staticsWeb项目
1.初始化npm环境		  			npm init-y			->生成package.json文件		->相当于maven的pom.xml
2.基于npm本项目安装vue	    npm install/i vue		->生成一个node_modules		->相当于maven的本地仓库

引入vue核心文件
定义挂载节点
初始化实例对象

一:组件

1.何为组件

在这里插入图片描述

2.组件的定义方式

全局组件
     定义全局组件语法:
           Vue.component("组件名",{
                template:"<h1>我是全局组件的组件内容</h1>"
            });
     注意:全局组件,所有的Vue实例都可以使用
1.定义标签元素
2.初始化实例对象挂载到节点
3.在挂载实例外部定义全局组件
4.在标签元素使用组件
<head>
    <meta charset="UTF-8">
    <title>Title</title>						<!--↓引入核心Vuejs-->
    <script type="text/javascript" src="node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
  <outcomponent></outcomponent>					<!--在有挂载实例的地方使用自定义的全局组件-->
</div>
</body>
<script type="text/javascript">
    
    Vue.component("outcomponent",{				//在挂载实例外部定义全局组件
        template:"<div>我是全局组件的组件内容</div>"
    });
    
    new Vue({
        el:"#app"								//挂载dom节点
    });
</script>
局部组件
     定义局部组件语法:
           new Vue({
                el:"#app",          // 挂载dom节点
                components:{        // 申明局部组件
                    "组件名":{
                        template:"<h1>我是局部组件的组件内容</h1>"
                    }
                }
            });
     注意:只能在当前Vue实例使用
1.定义标签元素
2.初始化实例对象挂载节点
3.在挂载实例内部申明局部组件
4.在标签元素使用组件
<head>
    <meta charset="UTF-8">
    <title>Title</title>							<!--↓引入核心Vuejs-->
    <script type="text/javascript" src="node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
    <innercomponent></innercomponent>				<!--在有挂载实例的地方使用自定义的局部组件-->
</div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#app",									// 挂载dom节点
        components:{								// 在挂载实例内部申明局部组件
            "innercomponent":{
                template:"<h1>我是局部组件的组件内容</h1>"
            }
        }
    });
</script>

3.组件的注意事项

组件的命名方式
A 如果我们使用 驼峰命名OutComponent 使用的时候只能—out-component
B 可以使用 out-component
C 推荐使用全小写outcomponent

template定义需要小心:有且只有一个根元素

template:"<div><h1>我是1</h1><h1>我是2</h1></div>"

4.template的定义方式

1.直接写 不推荐使用: 1 写代码没有任何提示 2 格式全手动自己调整 3 代码混乱不好理解

<body>
<div id="app">
    <outcomponent></outcomponent>
</div>
</body>
<script type="text/javascript">
    
    Vue.component("outcomponent",{
        template:"<div><h1>我是全局组件</h1></div>"
    });

    new Vue({
        el:"#app"
    });
</script>

2.使用HTML提供的< template >标签 推荐使用

<body>
<div id="app">
    <outcomponent></outcomponent>
</div>
<template id="myForm">
    <form action="">
        用户名:<input type="text" />
        密码:<input type="password" />
        <button type="submit"/>
    </form>
</template>
</body>
<script type="text/javascript">
    
    Vue.component("outcomponent",{
        template:"#myForm"
    });

    new Vue({
        el:"#app"
    });
</script>

注意:可以直接将< template > 定义到挂载的dom节点内部,那么会直接生效

3.使用< script type=“text/template” > 也不推荐使用

<body>
<div id="app">
    <outcomponent></outcomponent>
</div>
<script type="text/template" id="mytemplate">
    <div>
        <form action="">
            用户名:<input type="text" />
            密码:<input type="password" />
            <button type="submit"/>
        </form>
        <div>我会生效吗???</div>
    </div>
</script>
</body>
<script type="text/javascript">
    
    Vue.component("outcomponent",{
        template:"#mytemplate"
    });
    new Vue({
        el:"#app"
    });
</script>

5.组件获取数据的方式

想在组件内部获取数据,那么数据一定要定义在组件内部,而且格式有要求:
必须是一个data(){}
在函数内部,必须返回一个return {属性名:属性值},使用函数的方式返回一个对象

<body>
<div id="app">	
    <outcomponent></outcomponent>					<!--使用自定义的组件-->
    {{info}}
</div>
<template id="myForm">								<!--模板标签-->
    <form action="">
        用户名:<input type="text" />
        密码:<input type="password" />
        <button type="submit"/>
        {{info}}									<!--在组件中除了{{}}  也可以用指令取值-->
    </form>
</template>
</body>
<script type="text/javascript">
    Vue.component("outcomponent",{					//定义组件
        template:"#myForm",
        data(){										//一定要将数据定义到组件内部
            return {
              info:"我能娶到你吗??",				   //属性名:属性值
              name:"xxx",
              age:"23",
              sex:"男"
            }
        }
    });
    new Vue({        
        el:"#app",									//挂载dom节点
        data:{
            info:"我能娶到你吗??2"
        }
    });
</script>

两个data的区别:
vue实例对象的data是vue实例对象的一个属性,而这里的data是自定义模板的函数

二:路由

1.什么是路由?

是将浏览器请求映射到组件的技术(vue-router插件)

2.路由的使用步骤

A.安装路由
npm install vue-router
B.在页面中引入路由

 <script src="node_modules/vue-router/dist/vue-router.js"

C.编写路由使用流程代码

 1 定义组件													component
 2 定义VueRouter实例对象									router	VueRouter	routes	
 3 在对象中配置路由映射规则						    	 	routes	path	component	地址映射到组件
 4 将VueRouter实例交给vue实例管理	 			  			router	交给vue池管理	挂载dom节点

 5 定义跳转的超链接				 						    < router-link to="/xxx" >go to xxx< /router-link > 
 6 申明最终组件渲染位置							 			< router-view >< /router-view >

5-4-2-3-1-6		超链接-vue-VueRouter-映射规则-组件-渲染位置			组件-映射规则-VueRouter-Vue  超链接-渲染位置
<head>
    <meta charset="UTF-8">
    <title>Title</title>						  	<!--引入核心Vuejs-->
    <script type="text/javascript" src="node_modules/vue/dist/vue.min.js"></script>
    <script type="text/javascript" src="node_modules/vue-router/dist/vue-router.min.js"></script>										  						<!--↑引入vue-router 注意:必须放到Vue下面-->
</head>
<body>
<div id="app">
    <router-link to="/index">首页</router-link>		<!--5.定义超链接  跳转到路由规则-->
    <router-link to="/order">订单</router-link>
    <router-link to="/info">关于我们</router-link>
    <router-view></router-view>					 	 <!--6.定义路由匹配的组件显示位置-->
</div>
</body>
<script type="text/javascript">
    let INDEX =  Vue.component("index",{		  	//1.定义组件
        template:"<h1>首页</h1>"
    });
    let ORDER =  Vue.component("order",{
        template:"<h1>订单</h1>"
    });
    let INFO =  Vue.component("info",{
        template:"<h1>关于我们</h1>"
    });

    let router = new VueRouter({					//2/3.定义vue-router实例
        routes:[									//3/2.配置映射规则
            {path:"/index",component:INDEX},
            {path:"/order",component:ORDER},
            {path:"/info",component:INFO}
        ]
    });

    new Vue({
        el:"#app",									
        router  									//4.告诉Vue要使用路由,变量名和属性名相同时可以简写即只写属性名
    });
</script>

三:Vue属性扩展

1.计算属性 computed和监听属性 watch

<div id="app">
    {{new Date(birthday).getFullYear() +"年" + new Date(birthday).getMonth()+"月" }}<br>
    {{birth}}<br>
    <input type="text" v-model="msg"/>
</div>
</body>
<script type="text/javascript">
    new Vue({
        /*挂载dom节点*/
        el:"#app",
        data:{
            birthday:1529032123201, // 毫秒值
            msg:""
        },
        computed:{//申明计算属性,编写有提示,分离代码
            birth(){
                return new Date(this.birthday).getFullYear() +"年" + new Date(this.birthday).getMonth()+"月"
            }
        },
        watch:{//可以监听data属性值的变化
            msg(newVal,oldVal){
                console.log("newVal=="+newVal,"oldVal==="+oldVal);
            }
        }
    });
</script>

3.钩子函数 mounted(){} 页面加载完成触发

vue生命周期图解
在这里插入图片描述

<body>
<div id="app">
    <input type="text" v-model="msg"/>
</div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#app",
        data:{
            msg:"sdfsadfasd"
        },
        beforeCreate(){
            alert(111);
        },
        created() {
            alert(222);
        },
        beforeMount() {
            alert(333)
        },
        mounted(){			//整个页面加载完成触发,,相当于mvc的页面加载事件,在它里面我们可以发送ajax请求到后台拿数据
            alert("444");
        }
    });
</script>

四:webpack打包

作用:

0.可以将ES6转为ES5让浏览器可以解析
1.模块化后a.js引入b.js,然后页面只用引入a.js,但实际还是会请求多次,而webpack可以打包碎片化的文件,浏览器在加载的时候,只请求一次。
2.混淆压缩js+css代码
3.可以部署前端项目

安装

直接命令打包 新版本已不支持
配置文件打包 推荐
1.在项目根目录下创建:webpack.config.js 内容拷贝 https://webpack.docschina.org/
2.在webpack.config.js里需要调整打包入口和输出路径

const path = require('path');

module.exports = {
    entry: './js/a.js',											/*打包入口*/
    output: {													/*输出路径*/
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle3.js',
    },
};

3.控制台输入webpack
commonjs语法
===ES6 导出 define 导入 require
c.js

define(function () {
    return "C模块";
})

d.js

let c = require("./c.js");
alert(c);

webpack.config.js

const path = require('path');

module.exports = {
    entry: './js/d.js',											/*打包入口*/
    output: {													/*输出路径*/
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle2.js',
    },
};

html

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="dist/bundle2.js"></script>
</head>
<body>
</body>
</html>

打包js和css

如果是打包css

1 安装两个加载器
  npm install style-loader --save-dev						 使用css的加载器
  npm install css-loader --save-dev							解析css的加载器
2 需要在webpack.config.js增加配置module
       module: {
               rules: [
                   {
                       test: /.css$/i,								//扫描所有css后缀文件
                       use: ["style-loader", "css-loader"],			//使用两个加载器
                   },
               ],
           }

使用webpack运行项目(重要)

1.安装插件
npm install webpack-dev-server --save-dev
2.添加启动脚本
在package.json中配置script

"scripts": {
"dev": "webpack-dev-server --inline --progress --config ./webpack.config.js",},

3.通过命令启动服务
npm run dev

出现被覆盖引起的报错就修改依赖解决 (课件中复制即可) 再执行 npm install 刷新js库

Project is running at http://localhost:8080/

复制链接+页面名称到浏览器测试
在这里插入图片描述
终止运行命令:ctrl + c

五:Vue-cli 脚手架 必须搞定

搭建脚手架

创建新的staticWeb项目

1.安装脚手架命令:
npm install -g vue-cli 全局安装,以后不用再安装
2.基于脚手架安装webpack环境
vue init webpack
路由前和本身yes 后no npm
3.安装完成 运行
npm run dev

Your application is running here: http://localhost:8080

在这里插入图片描述

脚手架运行流程

在这里插入图片描述
在这里插入图片描述
HelloWorld.vue本来应该放到App.vue但main.js又把App.vue作为局部组件引用过来
有了局部组件后index.html本来应该通过app自定义标签去使用组件,但是这里直接嵌进index.html去了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis 三种模式----主从复制、哨兵以及集群】

目录 一、主从复制1.1、主从复制的概念1.2、主从复制的作用1.3、主从复制流程1.4、搭建Redis 主从复制1、环境准备2、安装Redis3、修改 Redis 配置文件&#xff08;Master节点操作&#xff09;4、修改 Redis 配置文件&#xff08;Slave节点操作&#xff09;5、验证主从效果 二、…

[牛客周赛复盘] 牛客周赛 Round 1 20230702

[牛客周赛复盘] 牛客周赛 Round 1 20230702 总结游游画U1. 题目描述2. 思路分析3. 代码实现 游游的数组染色1. 题目描述2. 思路分析3. 代码实现 游游的交换字符1. 题目描述2. 思路分析3. 代码实现 游游的9的倍数1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 牛客第一…

时序预测 | MATLAB实现BO-NARX和BO-LSTM贝叶斯优化神经网络股票价格预测比较

时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型和BO-LSTM贝叶斯优化长短期记忆神经网络股票价格预测比较 目录 时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型和BO-LSTM贝叶斯优化长短期记忆神经网络股票价格预测比较效果一览基本介绍研究过程程序…

《分布式中间件技术实战:Java版》学习笔记(二):RabbitMQ死信队列/延迟队列实现商品扣库存

一.关于RabbitMQ 1.RabbitMQ交换机类型 (1).FanoutExchange&#xff1a;广播交换机。消息发送到交换机后&#xff0c;会广播到所有队列&#xff0c;不需要经过路由。 (2).DirectExchange&#xff1a;直通交换机。生产者发送消息到交换机(Exchange)&#xff0c;再经过路由(Ro…

自然语言处理从入门到应用——预训练模型总览:预训练模型的拓展

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 相关文章&#xff1a; 预训练模型总览&#xff1a;从宏观视角了解预训练模型 预训练模型总览&#xff1a;词嵌入的两大范式 预训练模型总览&#xff1a;两大任务类型 预训练模型总览&#xff1a;预训练模型的拓展 …

Fully-Convolutional Siamese Networks for Object Tracking(SiamFC)

Fully-Convolutional Siamese Networks for Object Tracking&#xff08;SiamFC&#xff0c;ECCV2016&#xff09; 全卷积网络的优势在于&#xff0c;可以将一个更大的搜索图像作为输入提供给网络&#xff0c;它将在单个评估中计算所有平移后的子窗口的相似度&#xff0c;而不…

安全中级11:sql注入+联合、报错、时间盲注+sqlmap使用

目录 一、sql注入原理 二、联合SQL注入的方法 1.总体的思路 &#xff08;1&#xff09;先进行闭合&#xff0c;进行报错 &#xff08;2&#xff09;进行逃逸 &#xff08;3&#xff09;外带数据 &#xff08;4&#xff09;获取库名 表名 列名 数据 &#xff08;5&#…

【PADS封装】Dsub(DB9,DB15d等)公母头座子封装(带3D)

包含了我们平时常用的贴片Dsub(DB9,DB15等)公母头座子封装&#xff0c;总共28种封装及精美3D模型。完全能满足日常设计使用。每个封装都搭配了精美的3D模型哦。 1.D-Sub是被用来连接数据生成设备和数据输出设备&#xff0c;D-Sub和VGA&#xff0c;两者叫法不同。VGA是IBM在1987…

node-sass 安装失败解决办法

前言 很多小伙伴在安装 node-sass 的时候都失败了&#xff0c;主要的原因是 node 版本和项目依赖的 node-sass 版本不匹配。 解决方案 解决方案&#xff1a;把项目中的 node-sass 替换为 sass&#xff0c;其实 node-sass 已被官方弃用。 官方公告&#xff1a; LibSass and …

Echarts X轴label标签文本和刻度线对齐显示,而不是呈现在两个刻度线之间

如下图所示X轴标签文本Mon位于两个刻度线中间&#xff1a; 想要的效果是如下图&#xff0c;刻度线正下方是标签文本Mon&#xff1a; 只需要在xAxis中添加axisTick的alignWithLabel属性&#xff0c;属性值设为true即可&#xff1a; option {xAxis: {type: category,axisTick: …

Nginx【Nginx虚拟主机单网卡多IP配置、Nginx虚拟主机基于域名的配置 】(四)-全面详解(学习总结---从入门到深化)

Nginx虚拟主机单网卡多IP配置 通过不同的IP区分不同的虚拟主机&#xff0c;此类虚拟主机对应的企业应用非常少见&#xff0c;一般不同业务需要使用多IP的常见都会在负载均衡器上进行VIP绑定&#xff0c;而不是在Web上通过绑定IP区分不同的虚拟机。 需求 一台Linux服务器绑定两…

Hadoop基础——MapReduce

1. Hadoop序列化和反序列化及自定义bean对象实现序列化&#xff1f; 1) 序列化和反序列化的含义序列化是将内存中的对象转换为字节序列&#xff0c;以便持久化和网络传输。 反序列化就是将字节序列或者是持久化数据转换成内存中的对象。 Java的序列化是一个重量级序列化框架&a…

《TCP IP网络编程》第一章

2023.6.28 正式开始学习网络编程。 每一章每一节的笔记都会记录在博客中以便复习。 第1章 1.1理解网络编程和套接字 网络编程又叫套接字编程。所谓网络编程&#xff0c;就是编写程序使两台连网的计算机相互交换数据。 为什么叫套接字编程&#xff1f; 我们平常将插头插入插座上…

基于传统检测算法hog+svm实现目标检测

直接上效果图&#xff1a; 代码仓库和视频演示b站视频004期&#xff1a; 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示&#xff1a; 数据集在data文件夹下 需要检测的目标对象数据集放在positive文件夹下 不需要的检测对象放在negative文件夹下…

如何提高个人领导力?

当今竞争激烈的商业环境中&#xff0c;领导力变得越来越重要。领导力不仅是一项人类的艺术和科学&#xff0c;还由对人和组织的理解、管理和激励能力组成。因此&#xff0c;不断提高自身的领导力水平是每个领导者必须面对的挑战。而对于想要提高自身领导力的读者来说&#xff0…

复习之linux中的远程登陆服务

一、实验环境配置 本次实验需要两台新的虚拟机&#xff0c;因此我们reset虚拟机aa 和 bb 修改虚拟机的主机名配置基础ip网络删除/root/.ssh/目录------恢复原始状态 1. 重置虚拟机aa,bb # westos-vmctl reset aa 2. 修改虚拟机的主机名 # hostnamectl set-hostname b…

结构体指针

结构体数组 #include<stdio.h> struct student {char name[20];int age;int scores[3];char addr[50]; }; int main() {struct student stu{"林冲",30,100,100,100,"汴京"};struct student* p;p&stu;//printf("%s\n",(*p).name);//pr…

Table表格(antd-design组件库)简单使用

1.Table表格 展示行列数据。 2.何时使用 当有大量结构化的数据需要展现时&#xff1b; 当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。 组件代码来自&#xff1a; 表格 Table - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-demo:hello-world rea…

网络环境TFTPNFS搭建

文章目录 1. TFTP服务搭建2. NFS 环境搭建 1. TFTP服务搭建 1、Ubuntu上搭建TFTP服务器&#xff0c;需要安装tftp-hpa和tftpd-hpa&#xff0c;命令如下&#xff1a; sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd2、TFTP也需要一个文件夹来存放文件…

VMware安装Centos7.6教程(保姆级教程)

目录 一、为安装系统做准备&#xff0c;划分空间 二、开始安装Centos7.6系统 2.1、挂载镜像 2.2、基础配置 2.3、手动分区 2.4、KDUMP配置 2.5、网络配置 2.6、安全配置 2.7、设定root密码与创建账户 2.8、其它 一、为安装系统做准备&#xff0c;划分空间 二、开始安…