前端_Vue_2.创建一个Vue应用、模板语法
创始人
2024-03-26 01:57:51

文章目录

  • 一、创建一个Vue应用
    • 1.1. 应用实例
    • 1.2. 根组件
    • 1.3. 挂载应用
      • 1.3.1. DOM中的根组件模板
    • 1.4. 应用配置
    • 1.5. 多个应用实例
  • 二、模板语法
    • 2.1. 文本插值
    • 2.2. 原始HTML
    • 2.3. Attribute绑定
      • 2.3.1. 简写
      • 2.3.2. 布尔型 Attribute
      • 2.3.3. 动态绑定多个值
    • 2.4. 使用JavaScript表达式
      • 2.4.1. 仅支持表达式
      • 2.4.2. 调用函数
      • 2.4.3. 受限的全局访问
    • 2.5. 指令 Directives
      • 2.5.1. 参数 Arguments
      • 2.5.2. 动态参数
        • 2.5.2.1. 动态参数值的限制
        • 2.5.2.2. 动态参数语法的限制
      • 2.5.3. 修饰符 Modifiers


一、创建一个Vue应用

1.1. 应用实例

每个Vue应用都是通过createApp函数创建一个新的 应用实例

import { createApp } from 'vue'
const app = createApp({/* 根组件选项 */
})// 这段代码一般是放在后台的js代码中。
// 创建app后,挂载到前端HTML的DOM元素上

1.2. 根组件

传入createApp的对象实际上是一个组件,每个应用(app)都需要一个“根组件”,其他组件将作为其子组件。

如果你使用的是单文件组件(就是前文说的.vue文件),我们可以直接从文件中导入根组件。

import { createApp } from 'vue'
// 从一个单文件组件中导入根组件
import App from './App.vue'const app = createApp(App)

虽然本文的许多示例只需要一个组件,但大多数真实的应用都是由一课嵌套的、可重用的组件树组成的。例如,一个代办事项(Todos)应用的组件树可能是这样的:

App (root component)
├─ TodoList
│  └─ TodoItem
│     ├─ TodoDeleteButton
│     └─ TodoEditButton
└─ TodoFooter├─ TodoClearButton└─ TodoStatistics

1.3. 挂载应用

应用实例必须在调用了.mount()方法后才会渲染出来。该方法接收一个“容器”参数,可以是一个实际的DOM元素或是一个CSS选择器字符串:

DOM元素
Document Object Model,取首字母缩写为DOM,翻译过来就是文档对象模型。
当创建好一个页面并加载到浏览器时,DOM就出现了(相当于把HTML文档抽象转换为内存中的一个树形的数据结构对象),它会把网页文档转换为一个文档对象,以方便处理网页内容。 在HTML DOM中,每个元素都是一个节点,所有元素呈现出一种层次结构,可以将它称为节点树。
app.mount('#app');

应用根组件的内容将会被渲染在容器元素里面。容器元素自己将不会被视为应用的一部分。

.mount()方法应该始终在整个应用配置和资源注册完成后被调用。同时注意,不同于其他资源注册方法,它的返回值是根组件实例而非应用实例。

1.3.1. DOM中的根组件模板

当在未采用构建流程的情况下使用Vue时,我们可以在挂载容器中直接书写根组件模板:

import { createApp } from 'vue'const app = createApp({data() {return {count: 0}}
})app.mount('#app')

当根组件没有设置 template 选项时,Vue将自动使用容器的 innerHTML 作为模板(上面的容器是id为app的div)。

innerHTML设置或获取标签所包含的HTML+文本信息(从标签起始位置到终止位置全部内容包括HTML标签,但不包括自身)

1.4. 应用配置

应用实例会暴露一个 .config 对象允许我们配置一些应用级选项,例如定义一个应用级的错误处理器,它将捕获所有由子组件上抛而未被处理的错误:

app.config.errorHandler = (err) => {/* 处理错误 */
}

应用实例还提供了一些方法来注册应用范围内可用的资源,例如注册一个组件:

app.component('TodoDeleteButton', TodoDeleteButton)

这使得 TodoDeleteButton 在应用的任何地方都是可用的。

确保在挂载应用实例之前完成所有应用配置!

1.5. 多个应用实例

应用实例并不只限于一个。createApp API允许你在同一个页面中创建多个共存的Vue应用,而且每个应用都拥有自己的用于配置和全局资源的作用域。

const app1 = createApp({/* ... */
});
app1.mount('#container-1')const app2 = createApp({/* ... */
})
app2.mount('#container-2')

如果你正在使用Vue来增强服务器端渲染HTML,并且只想要Vue去控制一个大型页面中特殊的一小部分,应避免将一个单独的Vue应用实例挂载到整个页面上,而是应该创建多个小的应用实例,将它们分别挂载到所需的元素上去。

这点其实就是尽量将页面元素拆分的思想,组件化、模块化。
前期只要将页面划分好区域,然后挂载上Vue应用即可。


二、模板语法

Vue使用一种基于HTML的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的DOM上。所有的Vue模板都是语法层面合法的HTML,可以被符合规范的浏览器和HTML解析器解析。

在底层机制中,Vue会将模板翻译成高度优化的JavaScript代码。结合响应式系统,当应用状态变更时,Vue能够智能地推导出需要重新渲染的组件的最少数量,并应用最少的DOM操作。

响应式
Vue会自动跟踪JavaScript状态并在其发生变化时响应式地更新DOM。(MVVM中的VM同步更新V)
这边的后台逻辑是JS写的,相当于VM。JS中改变属性值,会自动更新到前端的V中。

2.1. 文本插值

最基本的数据绑定形式是文本插值,它使用的是“Mustache”语法(即双大括号):

Message:{{ msg }}

双大括号标签会被替换为相应组件实例中 msg 属性的值。同时每次 msg 属性更改时它也会同步更新。

2.2. 原始HTML

双大括号会将数据解释为纯文本,而不是HTML。若想插入HTML,你需要使用 v-html 指令:

Using text interpolation:{{ rawHtmll }}

Using v-html directive:

在这里插入图片描述
这里我们遇到了一个新的概念。这里看到的 v-html attribute被称为一个 指令 。指令由 v- 作为前缀,表明它们是一些由Vue提供的特殊的attribute,你可能已经猜到了,它们将为渲染DOM应用特殊的响应式行为。这里我们所做的事情简单来说就是:在当前组件实例上,将此元素的innerHTML与rawHtml属性保持同步。

span 的内容将会被替换为 rawHtml 属性的值,插值为纯HTML——数据绑定将会被忽略。注意,你不能使用 v-html 来拼接组合模板,因为Vue不是一个基于字符串的模板引擎。在使用Vue时,应当使用组件作为UI重用和组合的基本单元。

⚠安全警告
在网站上动态渲染任意HTML是非常危险的,因为这非常容易造成XSS漏洞。
XSS,Cross Site Scripting,跨站脚本攻击。当用户故意设计了一段代码时,浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行,从而盗取信息。

2.3. Attribute绑定

双大括号不能在HTML attributes中使用。想要响应式地绑定一个attribute,应该使用 v-bind 指令:

v-bind 指令指示Vue将元素的 id attribute与组件的 dynamicId 属性保持一致。如果绑定的值是 null 或者 undefined , 那么该attribute 将会从渲染的元素上移除。

2.3.1. 简写

因为 v-bind 非常常用,我们提供了特定的简写语法:

开头为 : 的attribute可能和一般的HTML attribute看起来不太一样,但它的确是合法的attribute名称字符,并且所有支持Vue的浏览器都能正确解析它。此外,他们不会出现在最终渲染的DOM中。简写语法是可选的,但相信你在了解了它更多的用处后,你应该会更喜欢它。

接下来,我们都将在示例中使用简写语法,因为这是实际开发中更常见的用法。

2.3.2. 布尔型 Attribute

布尔型attribute依据true/false值来决定attribute是否应该存在于该元素上。disabled就是最常见的例子之一。

v-bind 在这种场景下的行为略有不同:


当 isButtonDisabled 为真值或一个空字符串(即

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...