自定义指令

在上面学习了自定义组件接下来看一下自定义指令

自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是vue的指令if,for等是指令的名字!接下来看一下如何创造一个属于自己的指令吧!

全局指令,指令名称focus

  

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})

当然这个和自定义组件一样也是拥有局部指令的,在新建的实例种添加directives属性就行

  

directives: {
focus: {
// 指令的定义
inserted: function (el) {
el.focus()
}
}
}
指令配置以及修饰符

看下简单自定义指令


<div v-test:true.bottom.right="hw">

main.js

  

Vue.directive("test",function(el,binding){
//el是指令所处的元素
//binding是指令参数的对象集合
//上述中:true是参数(arg)
var arg=binding.arg;
//以.为名的修饰符.bottom.right等是修饰符,获取到是一个数组
var modifiers=binding.modifiers
//而这个指定的值通过value获取
var val= binding.value
})

过滤器

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

html


<!-- 在双花括号中 -->
{{ message | capitalize }} <!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

在main.sj中使用filter建立自己的过滤器(使用这个mm转换m 小demo)

单位换算
<br><br><br>
<input type="text" v-model="length">mm = {{length | meter}}
 

main.js

  

Vue.filter('meter',function(val,arg){
val =val || 0;
arg=arg || "m"
return (val/1000).toFixed(2) +arg;
})
//实例化Vue
new Vue({
el:"#app",
data:{
length:10
}
})

修改参数

{{length | meter('m')}}
mixins(混合)

比如在定义组件或者新建实例时候需要用到大量重复的methods,data,可以用这个minxins替代

  

var base={
data:function(){
return{
visiable:false
}
},
methods:{
toggle:function(){
this.visiable= !this.visiable
},
show:function(){
console.log(11)
this.visiable=true
},
hide:function(){
this.visiable=false }
}
}
//在新建组件时可以直接使用base的对象,mixins:['base'],存储的value要和上面存储的保存一致 Vue.component('show',{
template:`<div>
<button @click="toggle">点击</button>
<p v-if="visiable">干哈啊时代光华的规划过圣诞节的胳膊上价格多少噶啥的</p>
</div>`,
mixins:[base]
})
slot(插槽)

有时候我们一个组件由多部分组成,我们需要去改别其内容则需要插槽去改变

  

//组件模板
<template id="panel-tpl">
<div>
<div>标题</div>
<div>content></div>
<div>footer</div>
</div>
</template>
//main.js新建一个panel组件
Vue.component("panel",{
template:"#panel-tpl"
})
new Vue({
el:"#app"
})

html页面中我们可以调用这个panel调取

<panel></panel>
<panel></panel>
<panel></panel>

但是我们需要去改变panel模板的内容如何做呢

<template id="panel-tpl">
<div>
<div>标题</div>
<div><slot></slot></div>
<div>footer</div>
</div>
</template>

修改内容

<panel>我是新内容</panel>

这样content的内容就修改了,那么想去修改这个title,和footerne,欧这样的方法是不支持哪,Vue这么笨,你还浪费我一天时间学这个干嘛!早点放弃吧!诶,别着急慢慢看!实现这个这功能我们需要给每个部分的插槽(slot)指定一个name

<template id="panel-tpl">
<div>
<div><slot name="header"></slot></div>
<div><slot name="content"></slot></div>
<div><slot name="footer"></slot></div>
</div>
</template>

执行使用

<panel>
<div slot="header">这是新的头部</div>
<div slot="content">内容区域</div>
<div slot="footer"></div>
</panel>

那么你会发现头部中间内容改了,底部没有指定是空白的,那么你可能就是又有需求了,怎么让底部保存一个默认的,人就是这么JIAN(详见程序员与产品经理间的风波!手动滑稽!!!) 底部取一个默认值,在不指定时候是默认值,指定的时候是自己的定义内容!


<template id="panel-tpl">
<div>
<div><slot name="header"></slot></div>
<div><slot name="content"></slot></div>
<div><slot name="footer">我是一个默认的底部</slot></div>
</div>
</template>

把默认内容写在插槽中,这样保持了默认情况!

好了!一看写了5000多字了,一天带你从入门到放弃Vue.js系列结束!如有疑问可以下方留言!!!

转自 十月梦想博客 。
原文地址《一天带你入门到放弃vue.js(一)

相关文章:

一天带你入门到放弃vue.js(一)

一天带你入门到放弃vue.js(二)

一天带你入门到放弃vue.js(三)

一天带你入门到放弃vue.js(三)的更多相关文章

  1. 一天带你入门到放弃vue.js(二)

    接下来我们继续学习一天带你入门到放弃系列vue.js(二),如有问题请留言讨论! v-if index.html <div id="app"> <p v-if=& ...

  2. 一天带你入门到放弃vue.js(一)

    写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...

  3. 5分钟带你入门vuex(vue状态管理)

    如果你之前使用过vue.js,你一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,那么接下来我们就来学习 ...

  4. vue.js 三种方式安装--npm安装

    Vue.js是一个构建数据驱动的 web 界面的渐进式框架.     Vue.js 的目标是通过简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易上手,便于与第三方库或既有项目整合.     ...

  5. vue.js 三(数据交互)isomorphic-fetch

    至于fetch的介绍,在这里就不多说了,官方和网络上的说明不少 之前使用jquery的Ajax朋友,可以尝试一下使用一下这个新的api 推荐使用isomorphic-fetch,兼容Node.js和浏 ...

  6. 【转】vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

  7. vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

  8. vue.js 三种方式安装

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

  9. NodeJs 入门到放弃 — 网络服务器(三)

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14484454.html 目录 码文不易啊,转载请带上本文链接呀,感谢感谢 https ...

随机推荐

  1. 11.4 Flask session,闪现

    session 加密后放在用户浏览器的 cookie 中 于django 的自带session 不同,flask 的 session 需要导入 from flask import session 添加 ...

  2. AttributeError type object 'deprecated' has no attribute 'ROCKY'

    AttributeError type object 'deprecated' has no attribute 'ROCKY' 在使用kolla安装docker的时候遇到了AttributeErro ...

  3. luogu3346 诸神眷顾的幻想乡 (广义SAM)

    首先,让每一个叶节点做一次树根的话,每个路径一定至少有一次会变成直上直下的 于是对于每个叶节点作为根产生的20个trie树,把它们建到同一个广义SAM里 建法是对每个trie dfs去建,last就是 ...

  4. BM算法学习笔记

    一种nb算法,可以求出数列的递推式. 具体过程是这样的. 我们先假设它有一个递推式,然后按位去算他的值. ;j<now.size();++j)(delta[i]+=1ll*now[j]*f[i- ...

  5. python xpath学习

    一.选取节点: 二.谓词: 注意:在scrapy中用xpath进行搜索时,如果使用相对路径,要加上.,如,不然搜索的是整个文档.

  6. 存储与服务器的连接方式对比(DAS,NAS,SAN)

    存储分类简介 磁盘存储市场上,存储分类根据服务器类型分为:封闭系统的存储和开放系统的存储,封闭系统主要指大型机,AS400等服务器,开放系统指基于包括Windows.UNIX.Linux等操作系统的服 ...

  7. Pycharm中Django安装配置Mongodb

    一.安装mongo plugs插件 File->Setting Plugins查询Mongo选择Search in repositories 选择Mongo plugins,选择install ...

  8. spring boot本地调试服务器部署项目

    项目本地测试然后发布到服务器上,各种BUG层出不穷.那么下面配置下,然后在本地调试部署在服务器上的程序吧 一.首先idea打开你的项目,服务器上传打包的程序.然后如下命令启动(linux),绿色参数为 ...

  9. 数据库之数据库管理篇[mysql]

    管理数据库 1.mysql开闭使用篇 mariadb在Linux中首次进入mysql(因为此时还没有创建任何用户,mysql的root并不等效于linux中的root用户) sudo mysql 进入 ...

  10. 【转】史上最详细的Composer安装tp5教程

    http://www.thinkphp.cn/topic/52362.html Composer安装tp5教程1.下载composer先介绍几个网站Composer官网https://getcompo ...