Связывание Vue не происходит при интерполированном HTML. Вам нужно что-то Vue видит как шаблон, например a partial. Однако Vue применяет привязки только к частичной однократной; вы не можете вернуться и изменить текст шаблона и повторно привязать его. Поэтому каждый раз, когда текст шаблона изменяется, вы должны создать новое частичное.
Существует <partial>
тег/элемент, который можно положить в HTML, и он принимает имя переменной, поэтому процедура:
- шаблон HTML изменения
- регистра новое частичное имя для нового шаблон HTML
- обновление имя переменной, чтобы новый частичный визуализируется
Это немного страшно зарегистрировать что-то новое каждый раз, когда есть изменения, так это было бы предпочтительнее использовать компонент с более структурированным шаблоном, если это возможно, но если вам действительно нужен полностью динамический HTML с привязками, он работает.
Приведенный ниже пример начинается с одного сообщения, связанного с вашим фильтром, и через две секунды изменяется message
.
Вы можете просто использовать message
как имя частичного для регистрации, но вам нужно вычисленное значение, которое возвращает это имя после регистрации, иначе оно попытается отобразить до того, как имя будет зарегистрировано.
var v = new Vue({
el: 'body',
data: {
message: 'hi #linky'
},
computed: {
partialName: function() {
Vue.partial(this.message, this.hashTags(this.message));
return this.message;
}
},
methods: {
someAction: function() {
console.log('Action!');
},
hashTags: function(value) {
// Replace hash tags with links
return value.replace(/#(\S*)/g, '<a v-on:click="someAction()">#$1</a>')
}
}
});
setTimeout(() => {
v.$set('message', 'another #thing');
}, 2000);
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<partial :name="partialName"></partial>
Я хочу сказать вам большое спасибо, я искал об этом 3 днях .., спросил в гроте, и все сказали, что это невозможно, но вы сделали это. Но вы сказали, что это не очень хорошее решение, моя цель - заменить '# hashtags',' @ упоминает' ссылками, может быть, есть лучшее решение? Конечно, я могу подготовить его на стороне сервера, но он выглядит лучше, когда вся логика подана с одной стороны. – user2058653