Vuejs——Vue生命周期,数据,手动挂载,指令,过滤器
版权声明:出处http://blog.csdn.net/qq20004604
原教程:
http://cn.vuejs.org/guide/instance.html
http://cn.vuejs.org/guide/syntax.html
本博文是在原教程的基础上加上实例,并尝试说明的更详细。
(十)Vue实例的生命周期
如图:(我自己翻译的中文版,英文版请查看本博文顶部的,第一个链接)
(八)传入的数据绑定
先创建一个对象(假如是obj),然后将他传入Vue实例中,作为data属性的值,那么
①obj的值的变化,将影响Vue实例中的值的变化;
②相反一样;
③可以在Vue实例外面操纵obj,一样对Vue实例有影响;
④获取obj.a的值(假如他有这个属性),可以通过Vue实例(例如变量vm),vm.a这样的形式来获取(他们是等价的,也是绑定的);
⑤后续添加的数值是无效的
例如:
- <div id="app">
- {{a}}
- </div>
- <button onclick="add()">+1</button>
- <script>
- var obj = {a: 1}
- var vm = new Vue({
- el: '#app',
- data: obj
- })
- function add() {
- //vm.a++;
- obj.a++;
- }
- </script>
add函数中两条语句效果是等价的,都可以让显示的值+1
但若将代码改成这样:
- var obj = {b: 1}
- var vm = new Vue({
- el: '#app',
- data: obj
- })
- function add() {
- obj.a = 1;
- }
那么在点击按钮后,并不会显示值(没有绑定)。
注意:即使修改为vm.a=1也是无效的
准确的说,在Vue实例创建后,添加新的属性到实例上,是不会触发视图更新的。
在以上情况下,obj.a === vm.a ,注意,a之前没有data。
函数:
- function test() {
- if (vm.a === obj.a) {
- console.log("vm.a === obj.a");
- }
- }
其判断条件是true
(九)Vue实例暴露的接口
在上一篇中,提到vm.a=obj.a这个;然而我们并没有获取全部的data这个属性;
而Vue提供了几个暴露的接口:
接口(假设实例为vm) |
效果 |
vm.$data |
是vm的data属性 |
vm.$el |
是vm的el属性所指向的dom结点 |
vm.$watch |
示例: vm.$watch(“a”,function(newVal, oldVal){}) 当data里的a变化时,会触发回调函数 |
更多的可以查看
搜索 $ 作为关键词来查看。
(十一)$mount()手动挂载
当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中;
假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载。例如:
- <div id="app">
- {{a}}
- </div>
- <button onclick="test()">挂载</button>
- <script>
- var obj = {a: 1}
- var vm = new Vue({
- data: obj
- })
- function test() {
- vm.$mount("#app");
- }
初始,显示的是{{a}}
当点击按钮后,变成了1
(十二)用Vue的v-for写一个表格
- <!DOCTYPE html>
- <html>
- <head>
- <title>Vue</title>
- <script src="vue.js"></script>
- </head>
- <body>
- <div id="app">
- <button onclick="load()">点击挂载表格</button>
- </div>
- <style>
- table {
- border-collapse: collapse;
- border-spacing: 0;
- border-left: 1px solid #888;
- border-top: 1px solid #888;
- background: #efefef;
- }
- th, td {
- border-right: 1px solid #888;
- border-bottom: 1px solid #888;
- padding: 5px 15px;
- }
- th {
- font-weight: bold;
- background: #ccc;
- }
- </style>
- <script>
- var obj = {
- grid: [
- {id: "ID", name: "名字", description: "描述", clickButton: "点击事件"},
- {id: "1", name: "a", description: "amorous", clickButton: "点击弹窗"},
- {id: "2", name: "b", description: "beautiful", clickButton: "点击弹窗"},
- {id: "3", name: "c", description: "clever", clickButton: "点击弹窗"},
- {id: "4", name: "d", description: "delicious", clickButton: "点击弹窗"},
- ]
- }
- var vm = new Vue({
- data: obj,
- template: '<table><tr v-for="row in grid">' +
- '<td>{{row.id}}</td>' +
- '<td>{{row.name}}</td>' +
- '<td>{{row.description}}</td>' +
- '<td><button v-on:click="alert($index)">{{row.clickButton}}</button></td>' +
- '</tr></table>',
- methods: {
- alert: function (index) {
- alert("该行是第" + index + "行")
- }
- }
- })
- function load() {
- vm.$mount("#app");
- }
- </script>
- </body>
- </html>
(十三)数据绑定:
html标签的纯文本显示/被当做html标签处理;
插值单次更新;
①使用两个大括号时,假如字符串内容是html标签,那么不会被转义,而是正常显示;
②使用三个打括号时,字符串内的html标签会被直接转义,
例如:
- <div id="app">
- {{html}}
- </div>
- <script>
- var vm = new Vue({
- el:"#app",
- data: {
- html:"<span>span</span>"
- }
- })
- </script>
屏幕上显示内容是:
- <span>span</span>
如果是三个大括号包含变量名:
- <div id="app">
- {{{html}}}
- </div>
- <script>
- var vm = new Vue({
- el:"#app",
- data: {
- html:"<span>span</span>"
- }
- })
- </script>
- <script>
- function load() {
- vm.$mount("#app");
- }
- </script>
显示的内容则只有
span
③插入内容的数据绑定无效(在没有使用partials的情况下)
使用两个大括号或者三个大括号都一样
例如,将②中的html改为以下值
- data: {
- html: "<span>span{{val}}</span>",
- val: "11"
- }
显示结果乃是:
span{{val}}
说明没有绑定数据;
按照说明,使用partials可以绑定
http://cn.vuejs.org/api/#partial
不过不会用,等研究明白了再说
④禁止在用户提交的内容上动态渲染,否则会受到XSS攻击
⑤插值也可以用在html标签的属性中,例如class,或者id,或者其他。
但是Vue.js的指令和特殊特性内是不可以用插值的。
(十四)绑定表达式
插值的位置,可以使用JavaScript的表达式,例如:
- <div id="app">
- {{html?html:val}}
- </div>
- <script>
- var vm = new Vue({
- el: "#app",
- data: {
- html: "",
- val: "11"
- }
- })
- </script>
例如以上示例,
假如有html值,则输出hmtl值,否则输出val值;
也可以输出字符串,例如改为:
- {{html?html:"no words"}}
则输出no words
但是只能输出表达式,不能输出比如函数,或者直接放个v-for标签之类的。
但是我推断后者应该可以,可能是我写的方法不对。
(十五)过滤器
①简单来说,在插值中,加入管道符“|”,然后过滤器会生效。
例如:
capitalize这个过滤器,会将字符串的首字母大写
- <div id="app">
- {{{html|capitalize}}}
- </div>
- <script>
- var vm = new Vue({
- el: "#app",
- data: {
- html: "abc",
- val: "11"
- }
- })
- </script>
输出值是Abc
如果是汉字、数字、或者是本身首字母就大写了,则无反应。
②过滤器不能充当表达式使用,因此不能在表达式内使用过滤器,只能在表达式的后面使用。
例如:
- {{html[0]|capitalize}}
是可以的,会输出html的首个字母并将其大写;
但
- (html|capitalize)[0]
是会报错的(不加括号也报错),说明,不能将过滤器视为表达式的一部分
③过滤器可以加参数。
第一个参数:固定为表达式的值(被过滤目标);
第二个参数,过滤器后面的第一个单词;
第三个参数,过滤器后面的第二个单词,依次类推。
参数加引号则视为字符串,参数不加引号则视为表达式,表达式的值作为参数传递给过滤器。
官方例子是:
{{ message | filterA 'arg1' arg2 }}
④过滤器可以自己手写
(十六)指令
①指令(Directives)就是特殊的,以带有前缀v-的特性。
简单粗暴来说,标签里v-开头的就是指令(当然,要Vue能支持)。
指令的值限定为 绑定表达式,就是等号后引号里的。
如:
- <div id="app">
- <div v-if="html">
- {{val}}
- </div>
- <button onclick="test()">消失上一行</button>
- </div>
- <script>
- var vm = new Vue({
- el: "#app",
- data: {
- html: "abc",
- val: "11"
- }
- })
- function test() {
- vm.html = "";
- }
- </script>
输出11
其中<div v-if=”html”>就是指令,
可以通过点击按钮让那一行消失(因为html的值被设置为空)
②指令后面可以添加参数:
有些指令(例如v-bind)可以在名称后等号前,添加一个属性,这个属性的作用是响应性的更新HTML特性。
例如:
- <style>
- .white {
- white;
- }
- .black {
- black;
- }
- </style>
- <div id="app">
- <div v-bind:class="BC">背景颜色变化</div>
- <button onclick="test()">消失上一行</button>
- </div>
- <script>
- var vm = new Vue({
- el: "#app",
- data: {
- BC: "black"
- }
- })
- function test() {
- vm.BC = "white";
- }
- </script>
初始情况下,这个div的class和data里的BC绑定,由于BC的值是black,那么相当于v-bind所在的标签的class=”black”,所以初始情况下,背景颜色为黑色。
当点击按钮后,BC的值被更改为white,那么相当于标签的class=”white”,而类white的背景颜色为白色,所以该div的背景颜色变成了白色。
类似的有v-on:click事件,表示监视的是click事件,也可以改为
- <div v-on:mouseup="alert">背景颜色变化</div>
表示该标签当鼠标弹起的时候,执行methods的alert函数。
③修饰符
修饰符用于表示指令应当以特殊的方式进行绑定。
例如:.literal修饰符告诉指令应当将他的值解析为字符串,而不是表达式
或者是keydown.enter表示按回车键时调用函数
- <input v-on:keydown.enter="alert"></input>
Vuejs——Vue生命周期,数据,手动挂载,指令,过滤器的更多相关文章
- VUE自定义指令生命周期,VUE生命周期
一.自定义指令的生命周期 自定义指令有五个生命周期(也叫钩子函数),分别是 bind,inserted,update,componentUpdated,unbind bind:只调用一次,指令第一次绑 ...
- Vue系列(二):发送Ajax、JSONP请求、Vue生命周期及实例属性和方法、自定义指令与过渡
上一篇:Vue系列(一):简介.起步.常用指令.事件和属性.模板.过滤器 一. 发送AJAX请求 1. 简介 vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 ...
- Vue生命周期,面试常见问题
一.对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写.Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑.View 代表UI 组件,它负责将数 ...
- Vue生命周期 以及应用场景
首先一张官方图 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Vue生命周期,我奶奶看了都懂了
最近一直在学习Vue,而vue生命周期是我们不可能绕开的一个很核心的知识点,今天来简单的梳理一下大概的内容. 一.钩子函数 在一开始学习的时候,总有钩子函数这个名词冒出来,而且在vue官网文档中也频繁 ...
- 【Vue笔记】-- 详解vue生命周期
针对于Vue的生命周期进行详细的说明,方面加深对各个方法的引用. 引言: 前几天重新回顾vue官网时,看到vue的生命周期,想着自己用vue开发了快一年了,就总结总结vue知识,再次加深自己对vue的 ...
- 深入 Vue 生命周期
深入 Vue 生命周期 这篇博客将会从下面四个常见的应用诠释组件的生命周期,以及各个生命周期应该干什么事 1.单组件的生命周期 2.父子组件的生命周期 3.兄弟组件的生命周期 4.宏mixin的生命周 ...
- Vue基础进阶 之 Vue生命周期与钩子函数
Vue生命周期 Vue生命周期:Vue实例从创建到销毁的过程,称为Vue的生命周期: Vue生命周期示意图:https://cn.vuejs.org/v2/guide/instance.html#生命 ...
- vue生命周期钩子
转载自:https://segmentfault.com/a/1190000008010666?utm_source=tag-newest https://segmentfault.com/a/119 ...
随机推荐
- Web攻防系列教程之跨站脚本攻击和防范技巧详解
摘要:XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式.因为Web环境的复杂性以及XSS跨站脚本攻击的多变性,使得该类型攻击很 难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什么 ...
- 全局精确流量调度新思路-HttpDNS服务详解
但凡使用域名来给用户提供服务的互联网企业,都或多或少地无法避免在有中国特色的互联网环境中遭遇到各种域名被缓存.用户跨网访问缓慢等问题.那么对于腾讯这样的域名数量在10万级别的互联网公司来讲,域名解析异 ...
- RavenDB FS 安装使用 介绍
前言 最近项目因为要存储图片和文件,折腾了RavenDB,使用RavenDB的FS系统统一管理图片和文件. 安装 RavenDB 的FS文件系统,需要用到windows的远程差分压缩功能: 安装好之后 ...
- grant all赋权后mysql.user表权限字段还是N,但能登录和新建表
grant all赋权后mysql.user表权限字段还是N,但能登录和新建表 grant all privileges on linuxeye.* to linuxeye@'localhost' i ...
- linux新学篇
[学会使用快捷键] Ctrl + C:这个是用来终止当前命令的快捷键,当然你也可以输入一大串字符,不想让它运行直接Ctrl + C,光标就会跳入下一行. Tab: 这个键是最有用的键了,也是笔者敲击概 ...
- VR全景智慧城市—城市就在你眼前
"春风十里,不如有你",不知不觉间,身边的人已对VR不再陌生,VR眼镜的热销,VR体验店的火爆,VR游戏的向往等等.可见VR就是为生活而诞生! 2015年被称作VR行业的产业元年, ...
- windows 配置 Scheme + Emacs 编程环境
软件下载列表: Emacs Racket (这里使用 Racket ,更加方便,便于后面配置 Emacs) 配置 安装好 Emacs 后,在 C:\Users\用户名\AppData\Roaming\ ...
- Java经典编程题50道之三十六
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数. public class Example36 { public static void main(String[] a ...
- 搞不懂SSH与JAVA+Servlet+javabean有什么关系
在SSH中:struts 是控制层,同时与Jsp结合代表表现层,同时负责客户端请求的处理,Spring主要处理逻辑事物处理,Hibernate主要对数据库的持久化操作. Jsp+Servlet+Jav ...
- 使用可视化图表对 Webpack 2 的编译与打包进行统计分析
此文主要对使用可视化图表对 Webpack 2 的编译与打包进行统计分析进行了详细地讲解,供您更加直观地参考. 在之前更新的共十七章节中,我们陆续讲解了 Webpack 2 从配置到打包.压缩优化到调 ...