vue基础(二)过滤器、自定义指令与生命周期

一、过滤器

1.过滤器的分类

  • 局部过滤器:只允许在当前组件中使用
    <div id="app">
        <p>{{msg | dataFormat}}</p>
    </div>



        var vm= new Vue({
        el:'#app',
        data:{
            msg:'你不秃头'
        },
        methods:{},
        //定义私有的局部过滤器,只能在当前对象使用
        filters:{
            dataFormat(msg){
                return msg+'谁秃头'
            }
        }
    })

也可以通过传参数让器变得更加灵活

    <div id="app">
        <p>{{msg | dataFormat('谁秃头')}}</p>
    </div>
   

        var vm= new Vue({
        el:'#app',
        data:{
            msg:'你不秃头'
        },
        methods:{},
        //定义私有的局部过滤器,只能在当前对象使用
        filters:{
        //msg 表示过滤的数据   a表示传入的参数
            dataFormat(msg,a){
                return msg+a
            }
        }
    })
   </script>
  • 全局过滤器:所有组件都可以使用
<script>
        // 定义一个 Vue 全局的过滤器,名字叫做  toDouble 补零
        Vue.filter('toDouble', function(msg) {
            // 字符串的  replace 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则
            return msg < 10 ? msg : "0" +msg
         })
</script>

    <!-- html // -->

    <div> {{ 9 | toDouble }} </div>
    <!-- // 结果 <div>09</div> -->

也可进行串联

{{ message | filterA | filterB }}
  1. 在全局过滤器与局部过滤器中,全局要比局部使用的更广泛
  2. 如果过滤器名字重复,会按照远近使用,优先级:局部>全局
  3. 一个数据使用多个过滤器时(进行串联),将会从左至右执行,并且下一个过滤器接收的是上一个过滤器处理的结果

二、自定义指令

自定义指令也可分为(v-指令名):

  • 局部指令:只能在当前组件中使用
<body>
    <div id="app">
       <input type="text" v-foucs>
    </div>
    <script>
        new Vue({
            el:'#app',
            directives:{
                //注册局部指令
                foucs:{
                    //指令定义
                    inserteed:function(el){
                        el.foucs()
                    }

                }
            }
        })
    </script>
</body>
  • 全局指令
<body>
    <div id="app">
          <input type="text" v-focus>

    </div>
    <script>
        //注册一个全局指令  v-focus
        Vue.directive('focus',{
            //将绑定元素插入到dom中
            inserted:function(el){
                el.focus()
            }
        })
        new Vue({
            el:'#app'
        })
    </script>

指令定义函数提供了几个钩子函数(可选):

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

三、生命周期

1.图示
大体分为三部:创建=>运行=>销毁
生命周期图示
2.生命周期钩子
每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

  • beforeCreate
      在实例初始化之后,数据观测和event/watcher时间配置之前被调用。

  • created
      实例已经创建完成之后被调用。在这一步,实例已经完成以下的配置:数据观测,属性和方法的运算,watch/event事件回调。然而,挂载阶段还没开始,$el属性目前不可见。

  • beforeMount
      在挂载开始之前被调用:相关的render函数首次被调用。
      该钩子在服务器端渲染期间不被调用

  • mounted
    el被新创建的 vm. e l 替 换 , 并 挂 在 到 实 例 上 去 之 后 调 用 该 钩 子 函 数 。 如 果 r o o t 实 例 挂 载 了 一 个 文 档 内 元 素 , 当 m o u n t e d 被 调 用 时 v m . el替换,并挂在到实例上去之后调用该钩子函数。如果root实例挂载了一个文档内元素,当mounted被调用时vm. elrootmountedvm.el也在文档内。
    该钩子在服务端渲染期间不被调用

  • beforeUpdate
      数据更新时调用,发生在虚拟DOM重新渲染和打补丁之前.你可以在这个钩子中进一步第更改状态,这不会触发附加的重渲染过程。
      该钩子在服务端渲染期间不被调用。

  • updated
      由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。
      当这个钩子被调用时,组件DOM已经更新,所以你现在可以执行依赖于DOM的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
      该钩子在服务端渲染期间不被调用。

  • beforeDestroy
      实例销毁之间调用。在这一步,实例仍然完全可用。
      该钩子在服务端渲染期间不被调用。

  • destroyed
      Vue实例销毁后调用。调用后,Vue实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

四、Vue.js Ajax(vue-resource)使用

Vue 要实现异步加载需要使用到 vue-resource 库
1.引用

  • 在线引入
  • 本地引入
    2.get请求
    基于全局Vue对象使用http
Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);

在一个Vue实例内使用$http

this.$http.get('/someUrl', [options]).then(successCallback, errorCallback);

调取后台数据
使用get请求,获取到相对应路由地址,遍历后台数据,将数据渲染到前台页面

 this.$http.get('http://localhost:3000/books').then((data)=>{
                       console.log(data)
                        data.body.forEach(item => {
                           // console.log(item)
                           this.list.push(item)
                        });
                    })   

3.post请求
基于全局Vue对象使用http

Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

基于全局Vue对象使用http

this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

后台数据调取
使用post请求,与后台路由对应,写出相对应的key值,写入 {emulateJSON:true},将数据渲染到前台

tianjia(){
                  this.$http.post('http://localhost:3000/books/tj',{sm:this.sm,zz:this.zz,jj:this.jj},{emulateJSON:true}).then((data)=>{
                          this.chaxun()
                          this.sm=''
                          this.zz=''
                          this.jj=''
                  })

相关参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值