Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尽管已注册,但Vue组件未知_Javascript_Templates_Vue.js - Fatal编程技术网

Javascript 尽管已注册,但Vue组件未知

Javascript 尽管已注册,但Vue组件未知,javascript,templates,vue.js,Javascript,Templates,Vue.js,我正在尝试在另一个组件中组合一个组件,如下所示: <prompt :users="users"> ... <dataset v-for="ds in users" :user="user"></dataset> ... </prompt> 最后,模板: <template id="dataset-template"> <li>{{ user}}</li> </template>

我正在尝试在另一个组件中组合一个组件,如下所示:

<prompt :users="users">
...
  <dataset v-for="ds in users" :user="user"></dataset>
...
</prompt>
最后,模板:

 <template id="dataset-template">
      <li>{{ user}}</li>
  </template>

  <template id="prompt-template">
      <transition name="modal">
          <div class="modal-mask">
              <div class="modal-wrapper">
                  <div class="modal-container">

                      <div class="modal-header">
                          <slot name="header">
                              default header
                          </slot>
                      </div>

                      <div class="modal-body">
                          <slot name="body">

                          </slot>
                      </div>

                      <div class="modal-footer">
                          <slot name="footer">
                              default footer
                              <button class="modal-default-button" @click="$emit('close')">
                                  OK
                              </button>
                          </slot>
                      </div>
                  </div>
              </div>
          </div>
      </transition>
  </template>

  • {{user}}
  • 默认标题 默认页脚 好啊

    有什么我遗漏的步骤吗?我无法弄清楚该组件是如何未注册的。

    问题是您使用
    数据集
    组件作为
    提示符
    组件中的插槽。当Vue虚拟机试图找出组件树时,它将识别它不知道的
    dataset
    组件子组件在组件模板中使用,但不在插槽中使用。您必须在Vue vm中注册
    数据集
    组件,就像在
    提示符
    组件中一样。试试这个

    Vue.component('promp', { ... })
    Vue.component('dataset', { ... })
    
    在同一级别上注册组件也是有意义的,因为组件的模板也在同一级别上注册(彼此相邻)。 与之比较:此处子组件
    轴标签
    仅在父
    测谎仪
    组件的模板内使用。这是有效的,因为现在该组件与it子组件(而不是vue vm)签订了合同

    换言之: 应该可以将组件传递到任何组件
    A
    的插槽中,这些组件不是
    A
    的子组件。因此,传递到组件插槽的所有组件都应可用于vue vm

    拇指尺可能是
    如果一个组件没有出现在另一个组件模板中,它就不是一个子组件。

    在这种情况下,从
    中删除插槽标记不应该使错误消失吗?我试图删除它,但错误仍然出现,它可能是有点混乱。其本质是,如果您在应用程序的主元素中使用组件,则应在vue vm级别注册这些组件。有时您可能希望在提示符外显示
    dataset
    组件
    dataset
    实际上不是
    prompt
    的子组件,不是吗?它更像是要在
    提示符
    组件中显示的组件,这就是通过插槽传递它的原因。实际上,
    数据集
    应该是一个子组件,与我链接到的SVG示例非常类似。这就是我在提示符组件中注册它的原因。但是,您不能将它用作插槽,只能在提示符组件的模板中使用它。比如:`……`。它与插槽无关,您需要插槽将组件传递到另一个组件。这就是你想在这里做的。但这意味着数据集不是一个子组件。如果它是一个子组件,您必须在模板中使用它,如上面评论中所述。我的意思是,将来使用具有不同内容的提示组件不是很好吗?也许有一天你想要
    。或者将来您想在另一个地方使用
    dataset
    组件?
     <template id="dataset-template">
          <li>{{ user}}</li>
      </template>
    
      <template id="prompt-template">
          <transition name="modal">
              <div class="modal-mask">
                  <div class="modal-wrapper">
                      <div class="modal-container">
    
                          <div class="modal-header">
                              <slot name="header">
                                  default header
                              </slot>
                          </div>
    
                          <div class="modal-body">
                              <slot name="body">
    
                              </slot>
                          </div>
    
                          <div class="modal-footer">
                              <slot name="footer">
                                  default footer
                                  <button class="modal-default-button" @click="$emit('close')">
                                      OK
                                  </button>
                              </slot>
                          </div>
                      </div>
                  </div>
              </div>
          </transition>
      </template>
    
    Vue.component('promp', { ... })
    Vue.component('dataset', { ... })