自定义指令

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

自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以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. [curl]convert curl to python Ruby

    https://curl.trillworks.com/

  2. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)

    引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一   的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...

  3. EF CodeFirst系列(6)---配置1对1,1对多,多对多关系

    这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下. 1. 1对0/1关系配置 1. 通 ...

  4. dubbo本地服务化实现(dubbo三)

    一.dubbo服务化架构包含的内容 对于传统工程而言,分层的依据是按照包来区分.由于在相同的工程中,所以服务的提供和调用可以方便的实现. 但是对于分布式架构而言,服务的提供者负责服务具体的实现和接口规 ...

  5. SCI,EI,ISTP

    SCI:   Science Citation Index EI:     The Engineering Index ISTP:  Index to Scientific & Technic ...

  6. [物理学与PDEs]第3章第5节 一维磁流体力学方程组 5.2 一维磁流体力学方程组的 Lagrange 形式

    由 $$\bex \cfrac{\p \rho}{\p t}&+u_1\cfrac{\p \rho}{\p x}+\rho\cfrac{\p u_1}{\p x}=0, \eex$$ 我们可以 ...

  7. hadoop与hbase对应的支持版本

    官网信息:http://hbase.apache.org/book.html#java JDK的对应关系: 用jdk1.8+hadoop2.7.4/hadoop2.7.6+zookeeper3.4.1 ...

  8. day03 数据类型与运算符

    今日内容: 1.变量及常量的命名规范 2.与用户的交互 3.字符串的格式化输出 4.基本的数据类型 5.运算符 6.注释 今日重点: 1.变量及常量的命名规范 (1)强制规范[如果违反会报错] 1&g ...

  9. python 的生成器,yield的使用

    生成器 :含有yield 的关键字的函数就是一个生成器. 生成器的运行原理:调用函数时,当函数运行到yield时停止,返回值,下次调用时,就从这次的yield出继续执行,局部变量还是使用这次变量的值. ...

  10. 【原创】大叔问题定位分享(20)hdfs文件create写入正常,append写入报错

    最近在hdfs写文件的时候发现一个问题,create写入正常,append写入报错,每次都能重现,代码示例如下: FileSystem fs = FileSystem.get(conf); Outpu ...