在函数内部使用Vue $ refs参数

时间:2018-03-13 13:02:45

标签: javascript function parameters vue.js ref

我正在尝试使用$refs功能使用Vue访问DOM元素,但我无法使其工作。

我的元素如下所示。 plateId是动态生成的,因此它并不总是相同的数字:

<textarea :ref="plateId + '-notes'">

我的Vue功能如下:

/* This does not work */
addNotes: function(plateId) {
    console.log(this.$refs.plateId + '-notes');
}

每当我运行此代码并激活该函数时,它只会在我的控制台中读取undefined。我也尝试了这个,它也不起作用并且读取未定义:

/* This does not work */
addNotes: function(plateId) {
    var plateIdNotes = plateId + '-notes';
    console.log(this.$refs.plateIdNotes);
}

var替换const(我正在使用ES6并转换代码)也不起作用:

/* This does not work */
addNotes: function(plateId) {
    const plateIdNotes = plateId + '-notes';
    console.log(this.$refs.plateIdNotes);
}

我知道ref正确绑定到元素,因为当我在下面执行此操作时,我可以在控制台中看到所有其他引用,以及plateId-notes ref:

/* This works */
addNotes: function(plateId) {
    console.log(this.$refs);
}

如何使用我的函数中的参数访问plateId引用?

2 个答案:

答案 0 :(得分:2)

您可以使用[]表示法:

  methods: {
    foo (id) {
        alert(this.$refs[id + '-test'].innerText)
    }
  }

一个完整的工作示例:https://jsfiddle.net/drufjsv3/2/

答案 1 :(得分:0)

此外,您还可以通过访问

来访问视图中呈现的所有$ ref。
vm.$children.forEach( child => {
    var tag = child.$vnode.data.ref;
    console.log(vm.$refs[tag]);
    vm.$refs[tag].loadData();  
});
// loadData() is a method to implement when mounted or when you want to reload data

///////////////////////////////////

<script>
    export default {

      data() {
        return {
            notifications: []
        }
    },

    mounted() {
        this.loadData();
    },

    methods: {

        loadData: function() {
            axios.get('/request-json/notifications').then(res => {
                this.notifications = res.data;
            });
        },
.....