上节回顾
昨天我把Vue.js
学习中介绍篇
大致看了一遍,当时其实没有上传成功,莫名其妙的草稿也保存失败了,变成了半张的残缺稿,然后到早上到公司随意点了一下还是没有成功,也没太在意,然后...然后莫名其妙就传上去了???
本篇目标
今天准备把Vue实例篇
走一边
我知道我并不强大,但我想努力变强大。
创建一个Vue实例
一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的、可复用的组件树组成。
好,我来重复一遍:一个Vue应用
应该是一个new Vue根实例(树根)
和一堆乱七八糟的组件(树杈子)
组成。
创建Vue实例的基础格式:连我都觉得太简单所以不写了
。
var data = {
班级名称 : '狠一班',
班级学生 :
[
{姓名 : '我老猛' , 性别 : '女'},
{姓名 : '我老萌' , 性别 : '男'}
],
班主任 : '词穷'
}
var vm = new Vue({
data : data
})
由此可见data
应该就是一个属性的集合
而且各种类型的属性一锅炖
,嗯...,
逗号分割。
至于下面说的修改数据值,还是实际试一下比较好。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<div id="app">
{{message}}
<br />
<span v-bind:title="message">
鼠标悬停几秒据说有看头?
</span>
<br />
<p v-if="seen">Now you see me - 我伦</p>
<ol>
<li v-for="todo in todos">
{{todo.text}}
</li>
</ol>
<button v-on:click="reverseMessage">啥叫逆转消息???</button>
<br />
<input type="text" v-model="message" />
<ol>
<todo-item v-for="item in items"
v-bind:todo="item"
v-bind:key="item.id">
</todo-item>
</ol>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{todo.text}}</li>'
})
var data = {
message: 'Hello Vue!' + new Date().toLocaleString(),
seen: true,
todos: [
{ text: '第一个' },
{ text: '第2个' },
{ text: '第三个' }
],
items: [
{ id: 0, text: '青椒' },
{ id: 1, text: '茄子' },
{ id: 2, text: '西红柿' }
]
}
var app = new Vue({
el: '#app',
data: data,
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
})
</script>
</body>
</html>
拿我伦
做测试吧,F12
- Console
- data.seen
- app.seen=false
- data.seen
- data.seen=true
- app.seen
可以看到结果,两个对象无论修改哪一个,都会影响另外一个,同时改变了页面上我伦的显示隐藏。
只有当实例被创建时data
中存在的属性才是响应式。
这里我现在还不知道怎么在运行时向data
中追加属性对象,所以没有办法提供代码验证了...(短时间内没查出来)不过我记住这个点了。
Object.freeze()
var data = {
msg : 'you have a new message.',
num : 3,
seen : true
}
Object.freeze(data)
var app = new Vue({
el : '#app',
data : data
})
字面意思 - 冻结
,貌似无法单独冻结data
下的指定属性,比如:Object.freeze(data.msg)
,虽然不抱错,但是还是可以改值的,所以只能以data
为单位冻。
data
冻结后的结果:F12
- app.msg = 'some other.'
会报错,错误挺容易理解的,大概是这属性是只读
的,然而我们还可以用data.msg = 'some other.'
,可以看到这里不会报错,不过当输入data.msg
打印值时发现并没有修改其值。
Vue官方有提供一下内置实例属性与方法,他们都是$
开头,不过都是通过Vue实例.
出来的
Vue的生命周期
那图有些看不懂,先大致记一下生命周期的钩子的执行顺序吧:
从前到后依次是:
beforeCreate
->created
->beforeMount
->mounted
->beforeUpdate
->updated
->beforeDestroy
->destroyed
创建前
->创建后
->装载前
->装载后
->更新前
->更新后
->销毁前
->销毁后
小节
不知不觉又12点了,每天都感觉时间很少,总是不够用。
今天并没有些什么实质性的代码,几乎只是一些理论,而且并不多。
加油吧~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。