Vue实例以及插值语法


更多关于Vue.js的系列文章请点击Vue.js开发实践(0)-目录页


一、Vue实例

1.1、创建实例对象

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

	var vm = new Vue({
	  // 选项对象
	})

每个Vue实例中可以有许多的选项对象,本次涉及到的选项对象就有el,data,template,methods等,它们都各有用处。

1.2、数据关联

当一个 Vue 实例被创建时,它向 Vue 的响应式系统中加入了其 data 对象中能找到的所有的属性。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

// 我们的数据对象
var data = { a: 1 }

// 该对象被加入到一个 Vue 实例中
var vm = new Vue({
  data: data
})

// 获得这个实例上的属性
// 返回源数据中对应的字段
vm.a == data.a // => true

// 设置属性也会影响到原始数据
vm.a = 2
data.a // => 2

// ……反之亦然
data.a = 3
vm.a // => 3

当我们不需要数据关联时,可以使用Object.freeze()去标识它

var obj = {
  foo: 'bar'
}

Object.freeze(obj)

new Vue({
  el: '#app',
  data: obj
})
<div id="app">
  <p>{{ foo }}</p>
  <!-- 这里的 `foo` 不会更新! -->
  <button v-on:click="foo = 'baz'">Change it</button>
</div>

二、插值语法

插值语法是Vue.js最常用也是最简单的一项,用以对模板中的数据项进行插值操作。

2.1、文本插值

数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:

<span>Message: {{ msg }}</span>

在这个实例中,el代表的是挂载对象,data表示要传输给挂载对象的数据。

 <div id="vue1">{{ message }}</div>
new Vue({
	el: '#vue1',
	data: {
		message: 'Hello World!'
	}
})
2.2、原始html插值

原始html插值指的是在一个标签中再插入一段html代码,需要使用v-html指令:

 <div id="vue2" v-html="message" > </div>
new Vue({
	el: '#vue2',
	data: {
		message: '<h1>Hello World!</h1>',
	}
})
2.3、属性插值

对于html标签中的属性,如class、id等不能直接使用形如id='{{ message }}'的形式去插值,而是应该使用v-bind指令如:

<div v-bind:id="id"></div>
<div v-bind:class="class"></div>

三、在插值中使用JS表达式

对于所有的数据绑定,Vue.js 都提供了完全的 JavaScript 表达式支持,这些表达式会在所属 Vue 实例的数据作用域下作为 JavaScript 被解析。

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id"></div>
### Vue3 插值语法被识别为字符串的解决方案 在 Vue3 中,插值语法(如 `{{ }}`)通常用于动态地将数据绑定到模板中。如果插值语法未正确渲染而被识别为字符串,可能是由于以下原因之一导致: 1. **未正确引入 Vue 实例**:如果模板中的插值语法未被 Vue 解析,可能是因为该模板未被挂载到 Vue 实例上[^1]。 2. **样式作用域问题**:Vue 的 scoped CSS 可能会影响某些 DOM 元素的样式应用,但会直接导致插值语法失效[^2]。 3. **模板编译问题**:在 Vue3 中,如果使用的是单文件组件(SFC),确保模板部分已被正确解析。如果模板未被正确解析,插值语法可能会被视为普通字符串[^1]。 #### 解决方案 以下是解决插值语法被识别为字符串的具体方法: 1. **检查 Vue 实例是否正确挂载** 确保 Vue 实例已正确挂载到目标 DOM 元素上。例如,以下代码展示了如何正确挂载 Vue 实例: ```javascript const app = Vue.createApp({ data() { return { message: "Hello Vue3!" }; } }); app.mount('#app'); ``` 如果未正确挂载实例,则模板中的插值语法会被解析为动态内容[^1]。 2. **验证模板是否被正确解析** 如果使用的是单文件组件(SFC),确保模板部分已被正确解析。例如,以下是一个典型的 SFC 结构: ```vue <template> <div>{{ message }}</div> </template> <script> export default { data() { return { message: "Hello Vue3!" }; } }; </script> ``` 如果模板未被正确解析,插值语法将被视为普通字符串。 3. **检查是否有其他库或框架干扰** 在某些情况下,其他 JavaScript 库或框架可能会干扰 Vue 的模板解析。例如,如果页面中同时存在多个框架(如 React 或 Angular),可能会导致 Vue 的模板解析失败。确保没有其他框架干扰 Vue 的正常运行[^1]。 4. **确认是否启用了 Raw HTML 模式** 如果需要插入原始 HTML 内容,应使用 `v-html` 指令,而插值语法。例如: ```html <div v-html="rawHtml"></div> ``` 如果误用插值语法插入 HTML 内容,可能会导致内容被转义为字符串[^1]。 #### 示例代码 以下是一个完整的示例,展示如何正确使用 Vue3 的插值语法: ```javascript const { createApp } = Vue; createApp({ data() { return { message: "Hello Vue3!" }; } }).mount('#app'); ``` 对应模板: ```html <div id="app"> {{ message }} </div> ``` 如果上述代码仍无法正常工作,请检查是否存在其他潜在问题,例如 Vue 版本冲突或构建工具配置错误。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值