vue路由--参数获取、dom元素获取、给dom元素添加事件

Vue-router中的对象
$route 路由信息对象,只读对象
$router 路由操作对象,只写对象

一、参数的获取

1、路由对象配置

var Router = new VueRouter({
    // 配置路由规则
    routes:[
        // 路由对象有了名称就等于有了变量名,router-link只需要说明这个变量名即可
        {name:"login", path:"/login", component:Login},
        {name:"register",path:"/register/:name", component:Register}
    ]
})

2、路由跳转
query,params都是传递的参数

var App = {
    template:`<div>
        <!--内置组件,要加:相当于绑定一个属性,避免被做为字符串解析-->
        <router-link :to="{name:'login',query:{id:1}}">登录去</router-link>
        <router-link :to="{name:'register', params:{name:'abc'}}">注册去</router-link>
           <router-view></router-view>
        </div>`
}

3、参数的获取、在路由的组件中,this.$route获取参数

var Login = {
    template:`<div>登录界面</div>`,
    created() {
        console.log(this.$route.query)
    }
}
var Register = {
    template:`<div>注册界面</div>`,
    created() {
        console.log(this.$route.params)
    }
}

二、获取DOM元素

1、在组件的DOM部分,任意标签中 写上 ref=‘xxx’
2、通过组件对象 this.$refs.xxx 获取到元素

简单demo(结合钩子函数)

// 子组件 供$refs获取
let TemComponent = {
    template:`
        <div>我是子组件 </div>
    `
}
// 声明全局组件
Vue.component('temp',TemComponent);
let App = {
    template:`
        <div>
            <temp ref='tmp'/>
            <button ref='btn'>我是按钮</button>    
        </div>
    `,
    beforeCreate() {
        // 这里不能操作数据,知识初始化了事件等
        // this.$xxx这种是vue提供的
        //console.log(this.$refs.btn)  // undefined
    },
    created() {
        // 可以操作数据了
        //console.log(this.$refs.btn)
    },
    beforeMount() {
        // new Vue 发生装载 替换<div id='app'></div> 之前
        //console.log(this.$refs.btn)
    },
    mounted() {  // 此处才能获取到this.$refs.btn
        // 装载数据之后
        //console.log(this.$refs.btn)
        console.log(this.$refs.tmp) // 输出一个vue组件
        console.log(this.$refs.tmp.$el) // Dom对象

    },
}

// $属性:$refs 获取组件内的元素
// $parent: 获取当前组件对象的父组件
// $children: 获取子组件
// $root: 获取new Vue的实例
// $el: 组件对象的DOM元素 


new Vue({
    el:'#app',
    components:{
        app:App
    },
    template:`<app/>`
})

三、给DOM元素添加事件的特殊情况

在vue真正渲染DOM到页面以后,才做的的事
需要使用this.$nextTick,表示下一次的渲染,

this.$nextTick(function(){
   this.$refs.input.focus();
})

错误写法,直接操作,是没有效果的

this.$refs.input.focus();

demo

let App = {
    template:`
        <div>
            <input type='text' v-if='isShow' ref='input'/>   
        </div>
    `,
    data(){
        return{
            isShow: false
        }
    },
    mounted() { 
        // 装载数据之后
        //显示元素,并给与获取焦点
        this.isShow = true; // 会触发input元素的插入
        this.isShow = false;
        this.isShow = true;
        // 最终代码执行完毕之后,vue才会根据实际的值,
        // 进行DOM的操作

        // 给input元素获取焦点--不会出来因为不是立即渲染的
        // this.$refs.input.focus();

        // 在vue真正渲染DOM到页面以后,才做的的事
        // 表示下一次的渲染
        this.$nextTick(function(){
            this.$refs.input.focus();
        })
    },
}

new Vue({
    el:'#app',
    components:{
        app:App
    },
    template:`<app/>`
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值