<template>
<div>
<img v-directive:dynamic_literal />
</div>
</template>
E.g。 dynamic_literal ='ok' 这样在自定义指令中:
Vue.directive('directive', {
bind(el, binding) { binding.arg // should return 'ok'
如何将dynamic_literal用作变量或常量,其值应在data或prop下分配。
我尝试使用v-directive:{{dynamic_literal}}和:v-directive =“dynamic_literal”但没有用。
提前致谢!
答案 0 :(得分:2)
无法将动态参数传递给指令,但您可以创建一个中间组件,动态呈现通过prop传递的值。
export default {
render(createElement) {
return createElement(
'img', {
directives: [
{
name: 'directive',
arg: this.literal,
},
],
}
);
},
props: {
literal: {
type: String,
required: true,
},
},
};
所以这段代码应该可以解决问题
<template>
<div>
<new-img-component :literal="dynamic_literal" />
</div>
</template>
答案 1 :(得分:1)
我认为你没有办法让参数动态,但值可以是。
console.clear()
Vue.directive("test", {
bind(el, binding){
console.log(binding)
},
update(el, binding){
console.log(binding)
}
})
new Vue({
el:"#app",
data:{
dynamic_literal: 'ok'
}
})
<script src="https://unpkg.com/vue@2.2.6/dist/vue.js"></script>
<div id="app">
<h1 v-test="dynamic_literal">Hello World</h1>
<button @click="dynamic_literal='not ok!'">Change literal</button>
</div>
请注意,当您运行上面的代码段时,单击按钮时value
属性会在日志中发生更改。
答案 2 :(得分:1)
有点晚了但也许有些用处......你可以通过使用传递给指令钩子函数的vnode
参数来实际获得Vue指令中的动态参数。我们将使用参数本身作为我们想要在vnode
的上下文中访问的属性名称。例如,这也适用于计算属性。
Vue.directive('directive', function(el, binding, vnode){
el.innerHTML = vnode.context[binding.arg];
});
new Vue({
el: '#app',
template: '<div v-directive:argument></div>',
data: {
argument: 0
},
mounted() {
setInterval(() => ++this.argument, 1000);
}
});
(在这里使用function shorthand指令)
答案 3 :(得分:1)
为我工作:
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
...
OAuth2AuthenticationToken oauth2Authentication = new OAuth2AuthenticationToken(
authenticationResult.getPrincipal(),
authenticationResult.getAuthorities(),
authenticationResult.getClientRegistration().getRegistrationId());
oauth2Authentication.setDetails(authenticationDetails);
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(
authenticationResult.getClientRegistration(),
oauth2Authentication.getName(),
authenticationResult.getAccessToken(),
authenticationResult.getRefreshToken());
this.authorizedClientRepository.saveAuthorizedClient(authorizedClient, oauth2Authentication, request, response);
return oauth2Authentication;
}
使用<div v-mydirective:[dynamicArg]="foo">
更多信息:https://github.com/vuejs/rfcs/blob/master/active-rfcs/0003-dynamic-directive-arguments.md
答案 4 :(得分:0)
我建议您可以尝试执行以下操作:
<div v-mydirective="{text: dynamic_literal}">
带有dynamic_literal
的元素是您在组件的属性/数据中的变量