Vue(四)

自定义指令

  • directives

    • 全局指令

      <script>
      Vue.directive('foucs',{
          //当绑定元素插入到DOM中。
          inserted:function(el){
              //聚焦元素
              el.focus()
          }
      })
      </script>
      
    • 局部指令

      //实现的效果通全局指令
      <script>
      let vm = new Vue({
          el:"#app",
          directive:{
              focus:{
                  inserted:function(el){
      			el.focus()
                  }
              }
          }
      })
      </script>
      
    • 定义新指令后就可以直接使用v-focus属性了

      <div>
          <input type="text" v-focus/>
      </div>
      

生命周期函数(钩子函数)

  • beforeCreate(){}

    • 不能使用vm中的功能

    • 可以做网络请求,但是请求的数据不能操作数据源data

    • 可以做预加载

      beforeCreate() {
      	console.log("vm对象实例化之前调用---",this.msg)
      }
      
  • create(){}

    • vm对象创建完毕 所以可以使用vm对象中的功能

    • 但是不能操作dom

    • 如果希望网络请求加载的数据一下给用户呈现,就在这里请求页面的数据

      created(){
          console.log("vm对象实例化完毕调用---",this.msg)
      }
      
  • mounted(){}

    • 已经挂载了这时候既能操作页面 关键是 这个函数调用时 页面已经显示了

    • ajax请求在这里面发生,可以保证先给用户一个页面结构,然后再网络请求把数据刷新到页面的局部区域

      mounted(){
          console.log("虚拟节点树已经挂载到真实的文档树")
      }
      
  • beforeMount(){}

    • 可以操作data和方法

    • 不能操作dom

      beforeMount(){
      	console.log("虚拟节点树挂载到真实的文档树之前")
      }
      
  • beforeUpdate(){}

    • data数据初始化不会执行更新钩子

      beforeUpdate(){
          console.log("数据已经改变但是页面还没有刷新时",this.msg)
      }
      
  • updated(){}

    • 销毁实例之前

    • 常常去 把一些运行的代码停下来

    • 本地或者网络请求来记录用户的配置信息或者偏好设置

      updated(){
      	console.log("页面已经更新了",this.msg)
      }
      
  • beforDestroy(){}

    • 最后能够访问vm的函数了

    • 保存用户配置信息

      beforeDestroy(){
          console.log("vm销毁之前",this.msg)
      }
      
  • destroyed(){}

    • 无法操作vm了

    • 清理定时器之类的

      destroyed(){
          console.log("vm已经销毁",this)
      }
      

组件

  • components:{}
    • 全局组件

      <div>
          <el></el>
      </div>
      <script>
      Vue.component("el",{
          template:`<h1>wenben</h1>`//虚拟节点中写模板字符串
      })
      </script>
      
    • 局部组件

      • 组件中也有data属性,但是组件中的data是函数返回值
      new Vue({
          el:"app",
          component:{
      		"mytarget":{
      			data(){
      				return {
      					msg:"hello vue"
                      }
                  },
                  template:`<div>{{msg}}</div>`//使用data中的返回值
              }
          }
      })
      
    • 组件中也有data,methods等属性

      component:{
      	"myvue":{
      	templat:``,
          methods:{}.
          filters:{},
          computed:{},
          component:{}//这里是component中也能够嵌套compinent
          watch:{},
          directives:{},
      	beforeCreate(){},
      	created(){},
      	beforeMount(){},
      	mounted(){},
      	beforeUpdate(){},
      	updated(){},
      	beforeDestroy(){},
      	destroyed(){}
          }
      }
      

补充一些全局(过滤器等)

  • 全局与局部过滤器

    
    <div id="app">
        <p>{{title|fn}}</p>
    </div>
    <script>
        //局部过滤器写法
    	new Vue({
    		el:"#app",
            data:{
    			title:"title"
            },
            filters:{
    			fn(arg){return arg+"123"}
        	}
        })
        //全局过滤写法
        Vue.filter("fn",(arg)=>{
            return arg+"123"
        })
    </script>
    
    
    

补充一张Vue生命周期图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值