美文网首页VueVue.js开发技巧程序员
vue起步(3)自定义属性、过滤、指令

vue起步(3)自定义属性、过滤、指令

作者: Mx勇 | 来源:发表于2017-06-19 16:36 被阅读355次

v-html的使用

<div id="app">
    <div v-html="msg"></div>
</div>
    <script type="text/javascript">
    var vm=new Vue({
        el:'#app',
        data:{
            msg:'<strong>vue.js</strong>'
        },
        methods:{
            
            }
    });
    </script>
</body>```
这里说的是1.0版本有三花括号写法“{{{}}}”,2.0后没有了。
获取vue实例中的元素和数据:
```<body>
<div id="app">
    {{msg}}
</div>
    <script type="text/javascript">
    var vm=new Vue({
        data:{
            msg:'vue.js'
        },
        methods:{
            
            }
    }).$mount('#app');
    //vm.$mount('#app');
    alert(vm.$data.msg);
    vm.$el.style.background='gray';
    </script>
</body>```
自定义属性的获取:
 ```<body>
<div id="app">
    {{msg}}
</div>
    <script type="text/javascript">
    var vm=new Vue({
        aa:11,
        data:{
            msg:'vue.js'
        },
        methods:{
            }
    }).$mount('#app');
    //vm.$mount('#app');
    alert(vm.$options.aa);
    </script>
</body>```
计算属性的使用(computed):
```<body>
<div id="app">
    {{msg}}<br/>
    {{a}}
</div>
    <script type="text/javascript">
    var vm=new Vue({
        aa:11,
        data:{
            msg:'vue.js'
        },
        computed:{
            a:function(){
                return 1
            }
        }
    }).$mount('#app');

    </script>
</body>```
```<body>
<div id="app">
    {{a}}<br/>
    {{b}}
</div>
    <script type="text/javascript">
    var vm=new Vue({
        data:{
            a:1
        },
        computed:{
            b:{
                get:function(){
                    return this.a+1;
                },
                set:function(v){
                    return this.a=v-1;
                }
            }
            
        }
    }).$mount('#app');//挂载元素
    document.onclick=function(){
        vm.b=10;
    }
    </script>
</body>```
监听数据变化($watch):
```<body>
<div id="app">
    {{a}}<br/>
    {{b}}
</div>
    <script type="text/javascript">
    var vm=new Vue({
        data:{
            a:1,
            b:100
        },
    
    }).$mount('#app');//挂载元素
    vm.$watch('a',function(){
        this.b=this.a+10;
    })
    document.onclick=function(){
        vm.a=10;
    }
    </script>
</body>```
深度监听(主要监听对象object):
  ```<body>
<div id="app">
    {{a}}<br/>
    {{b}}<br/>
    {{json}}
</div>
    <script type="text/javascript">
    var vm=new Vue({
        data:{
            json:{aa:11,bb:22},
            a:1,
            b:100
        },
    
    }).$mount('#app');//挂载元素
    vm.$watch('json',function(){
        alert(1);},{deep:true})
    document.onclick=function(){
        vm.$data.json.aa=33;
    }
    </script>
</body>```
自定义过滤器filter:
```<body>
<div id="app">
    {{a|toDou(1,2)}}
    
</div>
    <script type="text/javascript">
    Vue.filter('toDou',function(value,a,b){
        alert(a+','+b);
        return value<10?'0'+value:''+value;
    })
    var vm=new Vue({
        data:{
            a:1,
        },
    
    }).$mount('#app');//挂载元素
    </script>
</body>```
自定义指令:
```<body>
    <div id="box">
       <span v-gray>发送到解放军</span>
    </div>
    <script>
      Vue.directive('gray',function(el){
        el.style.background='gray';
      })
        var vm=new Vue({
            data:{
              msg:'vue.js'
            },
            methods:{

            }
        }).$mount('#box');

    </script>
</body>```
```<body>
    <div id="box">
       <span v-demo-directive:gray="msg">发送到解放军</span>
    </div>
    <script>
      Vue.directive('demoDirective',{
        bind:function(el,binding,vnode){
            el.style.color='#fff';
            el.style.background=binding.arg;
            el.innerHTML=
            '指令名:' +binding.name+'<br>'+
            '指令内容value:' +binding.value+'<br>'+
            '指令绑定表达式expression:' +binding.expression+'<br>'+
            '传入指令的参数argument:' +binding.arg+'<br>'
             console.log(binding)
      }})
        var vm=new Vue({
            data:{
              msg:'vue.js'
            },
            methods:{

            }
        }).$mount('#box');

    </script>
</body>```
这里所说的有个钩子函数:
bind:   只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
inserted:   被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
componentUpdated:   被绑定元素所在模板完成一次更新周期时调用
unbind  只调用一次,指令与元素解绑时使用。


钩子函数参数:
定义对象的钩子函数参数如下
el: 指令所绑定的元素,可以用来直接操作 DOM 。
binding: 一个对象,包含以下属性: 
name: 指令名,不包括 v- 前缀。
value: 指令的绑定值, 例如: v-my-directive="1 + 1",value 的值是 2。
oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
expression: 绑定值的字符串形式。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。
arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 "foo"。
modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。
vnode: Vue 编译生成的虚拟节点。
oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
```Vue.directive('my-directive', {
  bind: function(){
    //做绑定的准备工作
    //比如添加事件监听器,或是其他只需要执行一次的复杂操作
  },
  inserted: function(){
    //...
  },
  update: function(){
    //根据获得的新值执行对应的更新
    //对于初始值也会调用一次
  },
  componentUpdated: function(){
    //...
  },
  unbind: function(){
    //做清理操作
    //比如移除bind时绑定的事件监听器
  }
})```
自定义拖拽div:
```<body>
    <div id="box">
       <span v-drag :style="{'width':'100px','height':'100px','background':'gray','position':'absolute','left':0,'top':0}"></span>
    </div>
    <script>
      Vue.directive('drag',{
        bind:function(el){
           el.onmousedown=function(ev){
            var disX=ev.clientX-el.offsetLeft;
            var disY=ev.clientY-el.offsetTop;
            document.onmousemove=function(ev){
                var l=ev.clientX-disX;
                var t=ev.clientY-disY;
                el.style.left=l+'px';
                el.style.top=t+'px';
            };
            document.onmouseup=function(){
                  document.onmousemove=null;
                   document.onmouseup=null;
            };
           }
      }})
        var vm=new Vue({
            data:{
              msg:'vue.js'
            },
            methods:{
            }
        }).$mount('#box');

    </script>
</body>```

相关文章

  • vue起步(3)自定义属性、过滤、指令

    v-html的使用

  • VUE初级入门实践

    VUE概述 生命周期 指令 内置指令 自定义指令 过滤器 内置过滤器 VUE1.0版本 VUE2.0版本(无内置过...

  • 2017-5-25 AngularJs

    service 自定义服务 1.指令 内置指令 自定义指令 2.过滤器 内置过滤器 自定义过滤器 3.服务 内置服...

  • Vue过滤器和vue-resource

    过滤器 之前我们学习了Vue的 vue基本指令 进阶学习,我们需要了解Vue的过滤器:Vue.js允许你自定义过滤...

  • angular自定义指令相关知识及代码

    大纲 1、自定义指令之——属性指令2、自定义属性指令的运行原理3、自定义属性指令代码实践4、自定义结构指令5、自定...

  • VUE02

    v-cloak ref monted Vue.directive()自定义指令 }) Vue.filter过滤器 ...

  • Vue常用特性

    ✍目录总览:(表单操作、自定义指令、计算属性、侦听器、过滤器、生命周期) 一、表单操作 1. 基于Vue的表单操作...

  • vue

    v-html指令: 指令的概念: 指令是vue自定义的以v-开头的自定义属性。每个不同的属性都有各自不同的意义和功...

  • vue常用特性应用场景

    1 过滤器 Vue.filter 定义一个全局过滤器 2 自定义指令 让表单自动获取焦点 通过Vue.direc...

  • Vue1.0学习小结1

    目录 什么是Vue? 常用指令 事件 属性 class和style 过滤器 数据交互 1. 什么是Vue? vue...

网友评论

    本文标题:vue起步(3)自定义属性、过滤、指令

    本文链接:https://www.haomeiwen.com/subject/yxbpqxtx.html