Почему Vue не распознает элемент данных, используемый в свойстве v-html?

#vue.js

#vue.js

Вопрос:

У меня есть повторно используемый компонент Vue следующим образом:

 Vue.component('ValueDisplay', {
    template: '<div v-html="value"></div>',
    data: function () {
        value: ''
    },
    mounted: function() {
        this.$el.client = this;
    },
    methods: {
        SetValue: function(value) {
            this.value = value;
        },
    }
});
  

Он предназначен для использования следующим образом:

 <value-display id="battery_percent">
  

Код, который обрабатывает данные из веб-сокета, затем вызывает следующую функцию для установки значения.

 window.SetValue = function(name, value)
{
    var el = document.getElementById(name);

    if ((null != el) amp;amp; el.hasOwnProperty('client')) {
        el.client.SetValue(value);
    }
}
  

Это позволяет мне разделить код отображения и код обработки веб-сокета, поскольку код обработки веб-сокета повторно используется для нескольких HTML-страниц. Я с большим успехом использовал аналогичный шаблон в своем коде, но это не удается.

Значение не отображается, и веб-консоль отображает следующую ошибку:

 ReferenceError: value is not defined
  

Эксперименты показывают, что это происходит потому, что Vue считает, что в части компонента «данные» нет переменной с именем «значение».

В другом месте у меня есть другой компонент Vue, который является более сложным. Он имеет несколько значений, которые используются и обновляются аналогичным образом. Это работает нормально.

 Vue.component('NavPane', {
    template: `<table class="fixed">
...
                         <td v-html="speed"></td>
...
    data: function () {
        return {
...
            speed: ''
        }
    },
    mounted: function() {
    },
    methods: {
    }
});
  

Когда вы сводите его к минимуму, этот код выполняет точно то же самое, что и неисправный код, но этот компонент работает.

Ответ №1:

Здесь у вас небольшая ошибка:

 data: function () {
  value: ''
},
  

Вы объединили фигурные скобки из объявления функции и литерала объекта. Это должно быть что-то вроде этого:

 data: function () {
  return {
    value: ''
  }
},
  

Комментарии:

1. Хорошо замечено. Я не мог видеть дерево для деревьев, так много разных уровней области видимости в javascript! Похоже, я не могу принять еще 6 минут. Спасибо! Вы сэкономили мне часы!