您的位置:首页 > 文旅 > 旅游 > 中国最大的网站排名_建一个个人网站_世界杯竞猜_网络销售怎么找客户

中国最大的网站排名_建一个个人网站_世界杯竞猜_网络销售怎么找客户

2025/2/28 6:38:26 来源:https://blog.csdn.net/yuey2003/article/details/145915973  浏览:    关键词:中国最大的网站排名_建一个个人网站_世界杯竞猜_网络销售怎么找客户
中国最大的网站排名_建一个个人网站_世界杯竞猜_网络销售怎么找客户

一、Vue3

基础

创建vue3工程

  1. 安装Node.js
  2. 在你所要存放目录位置 cmd 终端运行 npm create vue@latest
  3. 输入工程名字
  4. 需要ts JSX 选No 是否配置路由 NO(初步学习) 是否配置管理 No 是否配置测试 No Testing Solution NO 是否选择ESLint语法检查先不选 选NO
  5. 用 VSCode打开所在工程文件夹
  6. npm i 安装所有配置依赖

index.html 入口文件 启动前端工程 找到package.json "script"中的dev npm run dev

在src下面的main.ts文件中

import './assets/main.css'
// 引入createApp用于创建应用
import { createApp } from 'vue'
// 引入App根组件
import App from './App.vue'createApp(App).mount('#app')

App.vue 模板规范化 三部分分别写什么

<template><!-- html --><div class="app2"><h1>你好啊!</h1></div>
</template><script lang="ts">
// JS或TS
export default {name: "App" // 组件名
};
</script><style>
.app2 {background-color: #ddd;/* 盒子阴影 */box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}
</style>

Vue模板语法

插值语法
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>模板语法</title><script src="../js/vue.js"></script>
</head><body><!-- 准备好一个容器 --><div id="root"><h1>插值语法</h1><h3>你好,{{name}}</h3><hr /></div>
</body><script type="text/javascript">Vue.config.productionTip = false;    // 阻止 vue 在启动时生成生产提示。const vm = new Vue({el: '#root',data: {name: 'Jack'}})
</script></html>
指令语法
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>模板语法</title><script src="../js/vue.js"></script>
</head>
<!-- Vue模板语法有2大类:1. 插值语法:{{}},用于解析标签体内容写法:  {{xxx}},  xxx是js表达式,且可以直接读取到data中的所有属性。2. 指令语法:功能:用于解析标签(包括:标签属性、标签体内容、绑定事件...)v-xxxx,用于解析标签、标签属性、以及特殊属性--><body><!-- 准备好一个容器 --><div id="root"><h1>插值语法</h1><h3>你好,{{name}}</h3><hr /><h1>指令语法</h1><a v-bind:href="school.url">点我去{{school.name}}查找资料1</a><br /><a :href="school.url">点我去{{school.name}}查找资料2</a> <!-- v-bind     ==> 可以简写为 : --></div>
</body><script type="text/javascript">Vue.config.productionTip = false;    // 阻止 vue 在启动时生成生产提示。const vm = new Vue({el: '#root',data: {name: 'Jack',school: {  // 层级标签name: "百度",url: "http://www.baidu.com"}}})
</script></html><!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>模板语法</title><script src="../js/vue.js"></script>
</head>
<!-- Vue模板语法有2大类:1. 插值语法:{{}},用于解析标签体内容写法:  {{xxx}},  xxx是js表达式,且可以直接读取到data中的所有属性。2. 指令语法:功能:用于解析标签(包括:标签属性、标签体内容、绑定事件...)v-xxxx,用于解析标签、标签属性、以及特殊属性--><body><!-- 准备好一个容器 --><div id="root"><h1>插值语法</h1><h3>你好,{{name}}</h3><hr /><h1>指令语法</h1><a v-bind:href="school.url">点我去{{school.name}}查找资料1</a><br /><a :href="school.url">点我去{{school.name}}查找资料2</a> <!-- v-bind     ==> 可以简写为 : --></div>
</body><script type="text/javascript">Vue.config.productionTip = false;    // 阻止 vue 在启动时生成生产提示。const vm = new Vue({el: '#root',data: {name: 'Jack',school: {  // 层级标签name: "百度",url: "http://www.baidu.com"}}})
</script></html>

数据绑定

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数据绑定</title><!-- <script src="../js/vue.js"></script> --><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head><!-- Vue中有2种数据绑定的方式:1.单向绑定(v-bind):数据只能从data流向页面2.双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data备注:1.双向绑定一般都应用在表单类元素上(如:input、select等)2.v-model:value 可以简写为 v-model ,因为v-model默认收集的就是value值3.v-bind:value 可以简写为 :value --><body><div id="app"><!-- 普通写法 --><!-- 单向数据绑定:<input type="text" v-bind:value="name"> <br />双向数据绑定:<input type="text" v-model:value="name1"> --><!-- 简写 -->单向数据绑定:<input type="text" :value="name"><br />双向数据绑定:<input type="text" v-model:value="name1"></div><script>const { createApp, ref } = VuecreateApp({setup() {const name = ref('Hello vue!')const name1 = ref('Hello vue!')return {name, name1}}}).mount('#app')</script>
</body></html>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数据绑定 Vue2</title><!-- <script src="../js/vue.js"></script> --><script src="../js/vue.js"></script>
</head><!-- Vue中有2种数据绑定的方式:1.单向绑定(v-bind):数据只能从data流向页面2.双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data备注:1.双向绑定一般都应用在表单类元素上(如:input、select等)2.v-model:value 可以简写为 v-model ,因为v-model默认收集的就是value值3.v-bind:value 可以简写为 :value --><body><div id="root"><!-- 普通写法 --><!-- 单向数据绑定:<input type="text" v-bind:value="name"> <br />双向数据绑定:<input type="text" v-model:value="name1"> --><!-- 简写 -->单向数据绑定:<input type="text" :value="name"><br />双向数据绑定:<input type="text" v-model:value="name">  <br/><!--如下代码是错误的,因为v-model只能应用在表单类元素(输入类元素)上 --><h2 v-model:x="name">你好呀</h2></div><script>new Vue({el:'#root',data:{name:'百度'}})</script>
</body></html>

el与data的两种写法

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>el与data的两种写法</title><script src="../js/vue.js"></script>
</head><body><!-- data与el的2种写法1.el有2种写法(1).new Vue时候配置el属性。(2).先创建Vue实例,随后再通过vm.$mount('#root')指定el的值2.data有2种写法(1).对象式(2).函数式如何选择:目前那种写法都可以,以后学习到组件时,data必须使用函数式,否则会报错3.一个重要的原则:由Vue管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了
--><div id="root"><h1>你好,{{name}}</h1></div>
</body><script type="text/javascript">// Vue.config.productionTip = false;// el的两种写法/* const v = new Vue({//     // el: '#root',    // 第一种写法//     data: {//         name: '白羽'//     }// })// v.$mount('#root')  // 第二种写法 */// data的两种写法new Vue({el: '#root',// data的第一种写法:对象式/*data: {name: '白羽'}*/// data的第二种写法:函数式data: function () {return {name: '杨洋'}}})</script></html>

MVVM模型

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>理解MVVM</title><script src="../js/vue.js"></script>
</head><!-- MVVM模型:1. M:模型(Model):data中的数据2. V:视图(View):模板代码3. VM:视图模型(ViewModel):Vue实例观察发现:1. data中所有的属性,最后都出现在了vm身上2. vm代理了data中的所有属性   vm身上所有的属性  及  Vue原型上所有属性,在Vue模板中都可以直接使用。
--><body><!-- 准备好一个容器 --><div id="root"><!-- View模型 --><h1>学校名称:{{name}}</h1><h1>学校地址:{{address}}</h1></div>
</body><script>// ViewModel 模型   vue实例const vue = new Vue({el: '#root',data: {// Model 数据name: '尚硅谷',address: '北京'}})</script></html>

Object.defineProperty

<script>let person = {name:'张三',sex:'男',}
// 直接在person后面直接添加元素  age:18Object.defineProperty(person,'age',{value:18})
console.log(person)</script>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>1.回顾Object.defineproperty</title>
</head><body><script>let number = 18let person = {name: '张三',sex: '男',// age: 18}Object.defineProperty(person, 'age', {// value: 18,		使用这种方式去遍历// enumerable: true,  // 控制属性是否可以枚举,默认值是false// writable: true,  // 控制属性是否可以修改,默认值是false// configurable: true  // 控制属性是否可以删除,默认值是false// 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值// 配置修改,通过定义的number来进行person中age的修改get: function () {return number},// 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值set: function (value) {console.log('有人修改了age属性,且值是', value)number = value}})// console.log(Object.keys(person))// for (let key in person) {//     console.log(person[key])// }console.log(person);</script>
</body></html>

数据代理

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>何为数据代理</title><script src="../js/vue.js"></script>
</head><body><!-- 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写) --><script>let obj = { x: 100 }let obj2 = { y: 200 }// 想修改obj2.x的值,实际上修改obj.x的值Object.defineProperty(obj2, 'x', {get() {return obj.x},set(value) {obj.x = value}})</script>
</body></html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue中的数据代理</title><script src="../js/vue.js"></script>
</head>
<!-- 1.Vue中的数据代理:通过vm对象来代理data对象中的属性的操作(读/写)2.Vue中数据代理的好处:更加方便的操作data中的数据3.基本原理:通过Object.defineProperty()把data中的属性添加到vm上。为每一个添加到vm上添加一个属性,都指定一个getter/setter。为getter/setter内部去操作(读/写)data中的属性。--><body><div id="root"><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2></div>// vm._data = data  两者是一样的 vm._data = options.data = data<script>// 最初语法//const vm = new Vue({//el: '#root',//data: {//name: '尚硅谷',//address: '北京'//}//})let data = {name:'百度',address:'北京'}const vm = new Vue({el:'#root',data})</script>
</body></html>

事件处理

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>事件处理</title><script src="../js/vue.js"></script>
</head><body><div id="root"><h2>欢迎来到{{name}}学习</h2><!-- <button v-on:click="showInfo">点我提示信息</button> --><!-- 简写形式 --><button @click="showInfo1">点我提示信息1(不传参)</button><button @click="showInfo2($event,66)">点我提示信息2(传参)</button></div>
</body><script>new Vue({el: '#root',data: {name: '尚硅谷'},methods: {showInfo1(event) {alert('同学你好!')},showInfo2(event, number) {alert('同学你好!!')console.log(event, number)}}})</script></html>
事件修饰符
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>事件修饰符</title><script src="../js/vue.js"></script><style>* {margin-top: 20px;/* 设置间距 */}.demo1 {width: 200px;height: 200px;background-color: skyblue;}.box1 {padding: 5px;background-color: pink;}.box2 {padding: 5px;background-color: greenyellow;}.list {width: 200px;height: 200px;background-color: peru;overflow: auto;}li {height: 100px;}</style>
</head><!-- Vue中的事件修饰符:1.prevent:阻止默认行为(常用)2.stop:阻止事件冒泡(常用)3.once:事件只触发一次(常用)4.capture:使用事件捕获模式5.self:只有事件源才触发    只有event.target是当前操作的元素是才触发事件6.passive:事件处理函数的默认行为不会被立即执行,而是被放入一个队列中,在队列中的函数执行完之后再执行默认事件--><body><div id="root"><h2>欢迎来到{{name}}学习</h2><!-- 网页会默认跳转      阻止默认行为@click(常用) --><a href="http://www.atguigu.com" @click.prevent="showInfo">点我提示信息1</a><!-- 阻止事件冒泡(常用) --><div class="demo1" @click="showInfo"><button @click.stop="showInfo">点我提示信息2</button></div><!-- 事件只触发一次(常用) --><button @click.once="showInfo">点我提示信息3</button><!-- 使用事件的捕获模式 --><div class="box1" @click.capture="showMsg(1)">div1<div class="box2" @click="showMsg(2)">div2</div></div><!-- 只有event.target是当前操作的元素是才触发事件 --><div class="demo1" @click.self="showInfo"><button @click="showInfo">点我提示信息4</button></div><!-- 事件的默认行为立即执行,无需等待事件回调执行完毕 --><ul @wheel.passive="demo" class="list"><li>1</li><li>2</li><li>3</li><li>4</li></ul></div>
</body><script type="text/javascript">Vue.config.productionTip = false    // 阻止在控制台输出生产模式的提示// 创建Vue实例对象new Vue({el: '#root',data: {name: '尚硅谷'},methods: {showInfo(e) {// e.preventDefault()  // 阻止默认行为// e.stopPropagation()    // 阻止事件冒泡// alert('同学你好')console.log(e.target)},showMsg(msg) {console.log(msg)},demo() {// console.log('@')for (let i = 0; i < 10000; i++) {console.log('#')}console.log('累坏了')}}})
</script></html>
键盘事件
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>键盘事件</title><script src="../js/vue.js"></script>
</head><!-- 1.Vue中常用的按键别名:回车 => enter删除 => delete (捕获"删除"和"退格"键)退出 => esc空格 => space换行 => tab上 => up下 => down左 => left右 => right2.Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)3.系统修饰键(用法特殊):ctrl、alt、shift、meta(1).配合keyup使用:按下修饰键的同时,再按下其他键,事件才被触发。(2).配合keydown使用:只要按下修饰键,事件被触发。4.也可以使用keyCode去指定具体的按键(不推荐)5.Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键的别名--><body><div id="root"><h2>欢迎来到{{name}}学习</h2><!-- @keyup.enter表示按下回车触发showInfo方法 --><input type="text" placeholder="按下回车提示输入" @keyup.enter="showInfo"></input></div>
</body>
<script>new Vue({el: '#root',data: {name: '尚硅谷'},methods: {showInfo(event) {//if (event.keyCode === 13) {console.log(event.target.value)//}}}})
</script></html>

计算属性

插值语法
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>姓名案例_插值语法实现</title><script src="../js/vue.js"></script>
</head><body><div id="root">姓:<input type="text" v-model:value="firstName"> <br /><br />名:<input type="text" v-model:value="lastName"> <br /><br />姓名:<span>{{firstName}}-{{lastName}}</span></div>
</body><script>new Vue({el: '#root',data: {firstName: '张',lastName: '三'}})
</script></html>
methods实现
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>姓名案例_插值语法实现</title><script src="../js/vue.js"></script>
</head><body><div id="root">姓:<input type="text" v-model:value="firstName"> <br /><br />名:<input type="text" v-model:value="lastName"> <br /><br />姓名:<span>{{firstName}}-{{lastName}}</span></div>
</body><script>new Vue({el: '#root',data: {firstName: '张',lastName: '三'}})
</script></html>
计算属性实现
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>计算属性实现</title><script src="../js/vue.js"></script>
</head><body><div id="root">姓:<input type="text" v-model="firstName"> <br /><br />名:<input type="text" v-model:value="lastName"> <br /><br />全名:<span>{{fullName}}</span></div>
</body><!-- 
计算属性:1.定义:要用的属性不存在,要通过已有属性计算得来2.原理:底层借助了Object.defineProperty方法提供的getter和setter3.get函数什么时候执行?1.初次读取时会执行一次2.当依赖的数据发生变化时会再次被调用4.优势:与methods相比,内部有缓存机制,效率更高,调试方便。5.备注:1.计算属性最终会出现在vm上,直接读取使用即可2.使用计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时候依赖的数据发生改变
--><script>const vm = new Vue({el: '#root',data: {firstName: '张',lastName: '三'},computed: {fullName: {// get有什么作用? 当有人·读取fullName时,get就会执行,且返回值就作为fullName的值// get什么时候调用? 1.初次读取fullName时。  2.所依赖的数据发生变化时get() {  // 读取console.log('get被调用了')// console.log(this)   // 此处的this是vmreturn this.firstName + '-' + this.lastName},// get什么时候调用? 当fullName被修改时set(value) {   // 修改console.log('set', value)// console.log(value)  // value就是fullName的最新值const arr = value.split('-')this.firstName = arr[0]this.lastName = arr[1]}}}})
</script></html>

监视属性

e({
el: ‘#root’,
data: {
firstName: ‘张’,
lastName: ‘三’
},
computed: {
fullName: {
// get有什么作用? 当有人·读取fullName时,get就会执行,且返回值就作为fullName的值
// get什么时候调用? 1.初次读取fullName时。 2.所依赖的数据发生变化时
get() { // 读取
console.log(‘get被调用了’)
// console.log(this) // 此处的this是vm
return this.firstName + ‘-’ + this.lastName
},
// get什么时候调用? 当fullName被修改时
set(value) { // 修改
console.log(‘set’, value)
// console.log(value) // value就是fullName的最新值
const arr = value.split(‘-’)
this.firstName = arr[0]
this.lastName = arr[1]
}
}
}
})

~~~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com