Vue:Vue实例与数据绑定

导读:本篇文章讲解 Vue:Vue实例与数据绑定,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一,实例与数据

1,构造函数

Vue:创建Vue项目Hello Vue!的初学者部分,我们都使用到var app =new Vue({ //doSomething })这样的语句。

它的作用,就是通过构造函数 Vue() 创建一个 Vue 的根实例app,并启动 Vue 应用。

几乎所有代码都是作为对象传入Vue实例的选项内。

2,el对象

el 用于指定 个页面中己存在的 DOM 元素来挂载Vue实例。

它可以是HTMLElement,也可以是CSS选择器。下面两种写法是等价的:

<div id="app">
<!--doSomething-->
</div>

<script>
	let app = new Vue({
    	el: '#app', //这里使用了CSS选择器,等价于使用HTMLElement的document.getElementByld('app')
	})
</script>

3,data对象与数据绑定

在“第二印象”的input标签上,有v-model的指令,它的值对应于我们创建的 Vue 实例的 data 选项中的 name 字段,这就是 Vue 数据绑定。目前来看这似乎是单向从input标签到data的name属性再到{{ name }}的。

实际上,当一个 Vue 实例被创建时,它将 data 对象中的所有的属性加入到 Vue 的响应式系统中。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。当在代码中试着改变data的name属性的值时,会发现页面上标签内容会出现相应变化,这是一条数据从data的name属性到input标签与{{ name }}的流向路径。

所以说,数据的绑定是双向的。Vue对象的改变会直接影响到HTML的标签的变化,而且标签的变化也会反过来影响Vue对象的属性的变化。数据种类与来源是多样的。引用官方例子:

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

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

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

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

// ……反之亦然
data.a = 3
vm.a // => 3
  • 值得注意的是只有当实例被创建时就已经存在于 data 中的 property 才是响应式的。如果你知道你会在晚些时候需要一个 property,但是一开始它为空或不存在,那么你仅需要设置一些初始值。

回到前面的Vue实例,它可以通过使用 $ 获取很多常用的实例属性与方法,例如:

var data = { a: 1 }
var vm = new Vue({
  el: '#example',
  data: data
})

vm.$data === data // => true
vm.$el === document.getElementById('example') // => true

// $watch 是一个实例方法
vm.$watch('a', function (newValue, oldValue) {
  // 这个回调将在 `vm.a` 改变后调用
})

小结,通过 Vue 实例的 data 选项,可以声明应用内需要双向绑定的数据。建议所有会用到的数据都预先在 data 声明。

二,实例的生命周期

每个Vue实例创建时,都会经历一系列的初始化过程,同时也会调用相应的生命周期钩子。我们可以利用这些钩子,在合适的时机执行我们的业务逻辑。

生命周期如下:
在这里插入图片描述
其中红色圆角矩形的各部分,就是各个生命周期钩子函数。

举个例子:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>学习Vue</title>

		<style type="text/css">
			#app {
				color: red;
				font-size: 20px;
			}
		</style>
	</head>
	<body>
        <div id="app">{{ message }}</div>

        <script src="vue.js" type="text/javascript" charset="UTF-8"></script>

        <script type="text/javascript">
            var vm = new Vue({
                el: "#app",
                data: {
                    message: "Hello World"
                },
                beforeCreate: function() {
                    console.log('beforeCreate');
                },
                created: function() {
                    console.log('created');
                },
                beforeMount: function() {
                    console.log('beforeMount');
                }
            })
        </script>
    </body>
</html>

结果如下:
在这里插入图片描述

三,插值

1,文本

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

<div id="app">{{ message }}</div>

2,原生 HTML

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令:

<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值。

官方建议绝不要对用户提供的内容使用插值,如果非要操作的话,需要在服务端对用户提交的内容进行处理, 一般可将尖括号“<> ”转义。

3,Attribute

Mustache语法不能作用在HTMLattribute上,遇到这种情况应该使用 v-bind 指令:

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

对于布尔 attribute (它们只要存在就意味着值为 true),v-bind 工作起来略有不同,在下面的例子中,如果 isButtonDisabled 的值是 null、undefined 或 false,则 disabled attribute 就不会被包含在渲染出来的 <button> 元素中。

<button v-bind:disabled="isButtonDisabled">Button</button>

4,使用 JavaScript 表达式

如果想显{{}}标签而不进行替换,可使用 v-pre 指令条过这个元素和它子元素的编译过程:

<div id="app" v-pre>
    {{ 这里不会被编译 }}
    <span>{{ 这里也不会被编译 }}</span>
</div>

{{}}中除了使用简单的属性键值外,还可使用JavaScript表达式:

{{ number + 1 }}

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

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

<div v-bind:id="'list-' + id"></div>

Vue js 只支持单个表达式,不支持语句和流控制。
另外,在表达式中,不使用用户自定义的全局变量 只能使用 Vue 白名单内的全局变量, 例如 Math 和 Date。

四,过滤器

Vue.js 允许你自定义过滤器,可被用于一些常见的、简单的文本格式化。

过滤器可以用在两个地方:{{}}插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。

过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:

<!-- 在双花括号中 -->
{{ message | capitalize }}

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

过滤器可以串联:

{{ message | filterA | filterB }}

过滤器是 JavaScript 函数,因此可以接收参数:

{{ message | filterA('arg1', arg2) }}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98113.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!