VueJS <script> 模板 - 小胡子括号中未定义道具

Posted

技术标签:

【中文标题】VueJS <script> 模板 - 小胡子括号中未定义道具【英文标题】:VueJS <script> Template - Prop is not defined in mustache brackets 【发布时间】:2019-02-19 15:30:48 【问题描述】:

VueJS 新手,欢迎提出任何建议。

我正在尝试使用 Vue 创建 Bootstrap 4 导航。以下工作正常:

var Tabs = new Vue(
    el: '#tabs',
    components: 
        'tab-view': TabView,
    ,
    data:      
        tabs: settings.tabs
    ,
);

<div id='tabs'>
    <ul class='nav nav-tabs'>
        <li class='nav-item' v-for="(tab, index) in tabs" :tab='tab'>
            <a :id='tab' :index='index' :class=' active: (tab == "app"), "nav-link": true'>tab</a>
        </li>
    </ul>
</div>

但是,当我尝试使用脚本标签将其分离到模板中时,它不起作用 - 我收到 ReferenceError: tab is not defined:

var TabView = 
    template: '#tab-template',
    props: ['tab', 'index'],
;

<div id='tabs'>
    <ul class='nav nav-tabs'>
        <template v-for="(tab, index) in tabs">
            <tab-view :tab='tab' :index='index'></tab-view>
        </template>
        <script type='text/x-template' id='tab-template'>
            <li class='nav-item'>
                <a :id='tab' :index='index' :class=' active: (tab == "app"), "nav-link": true'>tab</a>
            </li>
        </script>
    </ul>
</div>

但是,如果我删除 tab,它会起作用。我做错了什么?

【问题讨论】:

传递 props 值的位置,即选项卡、索引 代码你提供你的整个代码以便测试它 我建议你看看 bootstrap-vue。 bootstrap-vue.js.org 【参考方案1】:

您实际上应该在vue app div tag 之外拥有tab-template,因为它是TabView 组件定义的一部分,就像这样。

<script type='text/x-template' id='tab-template'>
    <li class='nav-item'>
       <a :id='tab' :index='index' :class=' active: (tab == "app"), "nav-link": true' >tab</a>
    </li>
</script>

<div id='tabs'>
    <ul class='nav nav-tabs'>
        <div  v-for="(tab, index) in tabs" :key="index">
            <tab-view :tab='tab' :index='index' ></tab-view>
        </div>
    </ul>
</div>

类似于您在脚本中从主 vue var vm 中单独定义组件 var TabView,然后在 vue vm 中将其用作 'tab-view' 的方式

var TabView = 
    template: '#tab-template',
    props: ['tab', 'index']

;


var vm= new Vue(
   el: '#tabs',
   components: 
      'tab-view': TabView,
   ,
   data() 
      return
         tabs:["Home","app","about"]
      
   ,
);

【讨论】:

谢谢!有道理。

以上是关于VueJS <script> 模板 - 小胡子括号中未定义道具的主要内容,如果未能解决你的问题,请参考以下文章

VueJS模板引用未定义多个div?

没有模板的 vuejs 反应性

如何在 vuejs3 中编译 vue 模板

vuejs组件通信

使用Vuejs编写单js组件

vuejs 入门