初始Vue--Vue.js CDN 快速入门
通过 Content Delivery Network (CDN) 使用 Vue.js 是一种快速且简单的方法,可以让你在不进行本地安装或构建过程的情况下开始使用 Vue.js。
引入 Vue.js
我们可以通过script
标签导入
<script src="https:unpkg.com/vue@3/dist/vue.global.js"> </script>
这个地址放的就是vue
框架完整的源代码
引入之后我们就能使用其中的一些函数方法等
后面接着我们就可以开始写自己的script
语法
这份引入的scrip
提供了最重要的对象就是Vue
Vue
中有一个方法:Vue.createApp()
用来读取HTML
代码
此时在JS
里写HTML
就相当于在JS
里操作JS
,可以提升性能
<div id="app">
</div>
//由于浏览器是由上到下执行的所以要先引入
<script src="https:unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const list = {
template: `<ul>
<li>html</li>
<li>css</li>
<li>vue</li>
</ul>`
}
const app = Vue.createApp(list)//将对象list中的tempalte值读取成dom
app.mount('#app')//挂载到页面上id为add的容器上
</script>
计数器示例
使用 Vue.js 的代码:
<div id="app"></div>
<script src="https:unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
Vue.createApp({
template: `
<h2 class="count">{{counter}}</h2>
<button @click = 'add' class="add">+1</button>
<button @click = 'minus' class="minus">-1</button>
`,
data: function () {//变量
return {
counter: 10
}
},
methods: {//函数
add() {
this.counter++
},
minus() {
this.counter--
}
}
}).mount('#app')
</script>
使用原生 JavaScript 的代码:
<h2 class="count">0</h2>
<button class="add">+1</button>
<button class="minus">-1</button>
<script>
const count = document.querySelector('.count');
const add = document.querySelector('.add');
const minus = document.querySelector('.minus');
let counter = 0;
count.innerHTML = counter;
add.addEventListener('click', () => {
counter++;
count.innerHTML = counter;
});
minus.addEventListener('click', () => {
counter--;
count.innerHTML = counter;
});
主要区别:
-
数据绑定:
- 在 Vue.js 版本中,
{{ counter }}
是 Vue 的语法糖,用于数据绑定,HTML 内容会根据counter
数据的改变自动更新。 - 而在原生 JavaScript 版本中,必须手动更新 DOM 元素的
innerHTML
属性以反映counter
变量的变化。
- 在 Vue.js 版本中,
-
事件监听:
- Vue.js 使用
@click
语法来绑定事件处理器,这在编译时会被转换为相应的事件监听器。 - 原生 JavaScript 则使用
addEventListener
方法来添加事件监听器,并且需要在事件处理器中手动更新 DOM。
- Vue.js 使用
-
状态管理:
- Vue.js 自动跟踪
counter
的变化,并且在变化时重新渲染相关的 DOM 元素。 - 原生 JavaScript 需要显式地更新 DOM 每次状态改变。
- Vue.js 自动跟踪
-
代码组织:
- Vue.js 提供了一种更结构化的方式来组织代码,通过将数据、模板和方法分开,这有助于保持代码的整洁和可维护性。
- 原生 JavaScript 的代码通常更为紧凑,但在复杂的应用中可能会导致代码混乱和难以维护。
优点:修改HTML
结构时,不再需要操作DOM
结构,而是操作JS
对象
但是这种在JS
里写HTML
的方法手敲的话简直是地狱,连快捷提示都没有,那咋办呢?
template
HTML
还可以写在他原来的地方,就是在html里添加一个template
标签,逻辑写在这里面
<div id="app"></div> <!-- 添加id="app" -->
<template id="temp">
<div>
<h2>{{ counter }}</h2>
<button @click="add" class="add">+1</button>
<button @click="minus" class="minus">-1</button>
</div>
</template>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
template: '#temp',
data() { // 注意这里的箭头函数
return {
counter: 100
}
},
methods: {
add() {
this.counter++
},
minus() {
this.counter--
}
}
}).mount('#app') // 修改选择器为 '#app'
</script>
template
标签里的东西还是会被js读成字符串(template: '#temp'
)
在Vue.js 中使用template构建一个 Vue 应用
<body>
<!-- Vue 应用的挂载点 -->
<div id="app">
</div>
<!-- Vue 应用的模板 -->
<template id="temp">
<h2>{{message}}</h2>
<h2>{{count*10}}</h2>
<h2>{{getReverse()}}</h2>
<h2 @click="toggle">{{flag ? 'haha' :'heihei'}}</h2>
</template>
<script>
// 创建一个 Vue 应用实例
Vue.createApp({
template: '#temp',//id="temp"的 template 元素的内容作为你的应用模板
data: function () {//包含了 message, count, 和 flag 三个响应式属性
return {
message: 'hello vue',
count: 1,
flag: true
}
},
methods: {
getReverse() {//反转消息字符串
return this.message.split('').reverse().join('');
},
toggle() {//切换布尔标志,切换哈哈嘿嘿
this.flag = !this.flag;
}
}
}).mount('#app');
</script>
</body>
歌手信息页制作
现在我们已经掌握了通过CDN使用 Vue.js的方法了,接下来我们综合运用一下进行巩固。
我们要展示的页面大致为这样(部分歌手图片未展示为远程服务器的问题):
HTML部分:
<ul>
<!-- 遍历singer数组,为每个元素生成一个列表项 -->
<li class="item" v-for="item in singer">
<!-- 歌手头像 -->
<div class="avatar">
<img :src="item.avatar" alt="">
</div>
<!-- 歌手描述 -->
<div class="desc">
<div class="name">{{item.name}}</div>
<div class="nums">热播:{{item.songsCount}}首</div>
</div>
</li>
</ul>
JavaScript部分:
//创建Vue应用实例
Vue.createApp({
//指定模板来源
template: '#list',
//定义初始函数
data: function () {
return {
//歌手数据数组
singer: []
}
},
//组件创建后执行
created: function () {
//发起网络请求获取数据 fetch('https://mock.mengxuegu.com/mock/66585c4db462b81cb3916d3e/songer/songer')
// 将响应体转换为JSON
.then(res => res.json())
.then((data) => {
//将数据赋值给singer属性
this.singer = data.data
})
}
}).mount('#app')//挂载应用到DOM节点
* {
margin: 0;
padding: 0;
}
ul li {
list-style: none;
}
ul {
display: flex;
flex-wrap: wrap;
}
li {
width: 50%;
padding: 30px;
box-sizing: border-box;
}
li .avatar {
width: 100%;
}
li .avatar img {
width: 100%;
}
完整代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
ul li {
list-style: none;
}
ul {
display: flex;
flex-wrap: wrap;
}
li {
width: 50%;
padding: 30px;
box-sizing: border-box;
}
li .avatar {
width: 100%;
}
li .avatar img {
width: 100%;
}
</style>
</head>
<body>
<!-- 应用的挂载点 -->
<div id="app"></div>
<!-- 模板定义 -->
<template id="list">
<ul>
<li class="item" v-for="item in singer">
<div class="avatar">
<img :src="item.avatar" alt="">
</div>
<div class="desc">
<div class="name">{{item.name}}</div>
<div class="nums">热播:{{item.songsCount}}首</div>
</div>
</li>
</ul>
</template>
<!-- 引入Vue.js -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
Vue.createApp({
template: '#list',
data: function () {
return {
singer: []
}
},
created: function () {
fetch('https://mock.mengxuegu.com/mock/66585c4db462b81cb3916d3e/songer/songer')
.then(res => res.json())
.then((data) => {
console.log(data);
this.singer = data.data
})
}
}).mount('#app')
</script>
</body>
</html>
数据驱动的设计
在 Vue.js 中,数据是驱动应用的核心。通过 data
函数,我们可以定义应用的状态,即页面上显示的数据。
在歌手信息展示页中,我们定义了一个名为 singer
的数组,用于存储歌手的详细信息。
异步数据加载
真实的 Web 应用往往需要从服务器加载数据。在我们的示例中,我们展示了如何使用 fetch
API 异步获取歌手数据,并将其存储在 singer
数组中。created
生命周期钩子为我们提供了一个完美的时机,来执行这些初始化任务。
响应式 UI 构建
借助 Vue.js 的模板语法,我们可以轻松地构建出响应式的 UI。v-for
指令允许我们遍历 singer
数组,为每位歌手生成一个列表项。同时,{{ }}
插值表达式用于显示歌手的名字、头像和歌曲数量,实现了数据与视图的实时同步。
以上就是有关通过CDN使用Vue.js的全部介绍,通过最后制作的歌手信息展示页,我们不仅实践了 Vue.js 的基本使用,还深入理解了数据驱动的设计理念、异步数据加载的技巧以及响应式 UI 的构建方法。希望本文对你有所帮助,感谢你的阅读!
转载自:https://juejin.cn/post/7392513761855504394