你能在Vuejs中动态定义模板字符串中的属性吗?

时间:2018-02-15 17:15:55

标签: javascript vue.js vuejs2

我是否可以传入模板字符串并动态传递属性以便我可以使其成为被动的?在下面的示例中,我希望消息是被动的,但我不想在数据选项上预定义它。

<div id="vue">
 <component :is="string && {template:string}"/>
</div>

new Vue({
    el:'#vue',
    data(){
    return {
    string:undefined,
   }
  },
  created(){
    //setTimeout to simulate ajax call
    setTimeout(()=> this.string = '<div><h1 v-for="n in 1">Hello!    </h1><input v-model="message" placeholder="edit me"><p>Message is: {{ message }}</p>    </div>', 1000)
  }
})

https://jsfiddle.net/kxtsvtro/5/

3 个答案:

答案 0 :(得分:4)

您可以像指定模板一样指定data:只需将其插入到组件规范中。

&#13;
&#13;
new Vue({
  el: '#vue',
  data() {
    return {
      string: undefined,
      dataObj: undefined
    }
  },
  created() {
    //setTimeout to simulate ajax call
    setTimeout(() => {
      this.string = '<div><h1 v-for="n in 1">Hello!</h1><input v-model="message" placeholder="edit me"><p>Message is: {{ message }}</p></div>';
      this.dataObj = {
        message: 'initial'
      };
    }, 1000)
  }
})
&#13;
<script src="//unpkg.com/vue@latest/dist/vue.js"></script>
<div id="vue">
  <component :is="string && {template:string, data: function() { return dataObj}}" />
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你可以使用Props,但我不确定这是否是最好的方法:)这是一个例子:

new Vue({
	el:'#vue',
	data(){
  	return {
    	string:undefined,
      message:''
    }
  },
  created(){
  	//setTimeout to simulate ajax call
  	setTimeout(()=> this.string = '<div><h1 v-for="n in 1">Hello!</h1><input v-model="message" placeholder="edit me"><p>Message is: {{ message }}</p></div>', 1000)
  }
})
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.min.js"></script> 
<div id="vue">
  <component :is="string && {template:string, props:['message']}" :message="message"/>
</div>

答案 2 :(得分:0)

看起来您想要的是具有<slot>的组件,您可以将自定义组件转储到其中。如果您尝试撰写的组件可能是最简单的方法。