欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-21 10:44:35
...

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/>`
})
相关标签: vue