Vue.js Dynamic Litera Directivel в плагине не связывается правильно
Я пытаюсь определить динамическую буквальную директиву, согласно Vue Doc внутри плагина
myPlugin.js
const defaultNoiseColor = 'white'
...
const MyPlugin = {
install (Vue, options) {
console.log('installing MyPlugin')
Vue.directive('noise', {
isDynamicLiteral: true,
bind (el, binding, vnode) {
const noisecolor = binding.expression || defaultNoiseColor
console.log('NOISE BIND: ', noisecolor)
},
update (el, binding, vnode) {
const noisecolor = binding.expression || defaultNoiseColor
console.log('NOISE UPDATE', noisecolor)
},
unbind (el, binding, vnode) {
console.log('NOISE UNBIND: ')
}
})
...
}
}
export default MyPlugin
В моем main.js я добавил
main.js
...
Vue.use(MyPlugin)
...
и у меня есть пользовательская директива (с усами) в моем App.vue
App.vue
<template>
<div id="app" class="container" v-noise="'{{ noisecolor }}'">
...
</div>
</template>
<script>
...
window.data = {
kittens: true,
noisecolor: 'brown'
}
export default {
...
data () {
return window.data
}
}
</script>
Таким образом, noisecolor должен быть "коричневым", но после тестирования myPlugin я получаю белый цвет по умолчанию при связывании... (должен быть во время обновления в соответствии с документом?)
myPlugin.spec.js
import Vue from 'vue'
import App from '@/App'
import MyPlugin from '@/plugins/MyPlugin'
import { mount } from 'avoriaz'
Vue.use(MyPlugin)
...
describe('MyPlugin', () => {
let wrapper
beforeEach(() => {
wrapper = mount(App, { attachToDocument: true, propsData: { noisecolor: 'brown' } })
})
it('should run', () => {
Vue.noise.start()
...
expect(true).to.equal(true)
})
})
1 ответ
Обнаружил проблему: следует использовать binding.value, а не binding.expression
разрешено добавление
console.log('NOISE BINDING: ', binding)
const noisecolor = binding.value || defaultNoiseColor
что приводит к следующему выводу консоли:
LOG LOG: 'NOISE BINDING: ', Object{name: 'noise', rawName: 'v-noise',
value: 'brown', expression: 'noisecolor', modifiers: Object{}, def:
Object{isDynamicLiteral: true, bind: function bind(el, binding, vnode)
{ ... }, update: function update(el, binding, vnode) { ... }, unbind:
function unbind(el, binding, vnode) { ... }}}
LOG LOG: 'NOISE BIND: ', 'brown'