【问题标题】:Inject data into scope without <template>在没有 <template> 的情况下将数据注入范围
【发布时间】:2016-12-26 15:52:47
【问题描述】:

我想去掉 vue 2.x 应用程序中使用的 html 中的两行。带有&lt;template scope="props"&gt; 和相应&lt;/template&gt; 的行应该是不必要的。

<script src="https://unpkg.com/vue/dist/vue.js"></script>

<div id="app">
  <p>{{ message }}</p>
  <my-component>
    <template scope="props">
      <p>{{props.test}}</p>
    </template>
  </my-component>
</div>

我宁愿定义自己的组件属性来定义作用域名称

<script src="https://unpkg.com/vue/dist/vue.js"></script>

<div id="app">
  <p>{{ message }}</p>
  <my-component with="props">
    <p>{{props.test}}</p>
  </my-component>
</div>

因此,与其将 HTML 的编写者暴露于 templatesscopes 的概念,我们将在 my-component 中这样做。

有人知道 vue 模板机制是否对像这样的组件内部扩展开放?

【问题讨论】:

    标签: vue-component vue.js vuejs2


    【解决方案1】:

    拥有组件的好处是它可以在多个地方重复使用。所以想法是在一个地方定义template,你可以在多个地方使用它。

    您编写的示例,您将能够再次重复使用它。组件的模板一般不在组件内部定义,它是独立的,并且该组件可以在多个地方使用。

    请看下面的一个示例:

    <div id="app">
      <template id="item-edit">
        <li>
          <span v-show="!inEdit">{{item.name}}</span>
          <input v-show="inEdit" type="text" v-model="item.name" />
          <a href="#" @click.prevent="toggle();">{{inEdit ? 'save' : 'edit'}}</a>
        </li>
      </template>
      <ul>
        <item-edit v-for="item in items" :item="item"></item-edit>
      </ul>
    </div>
    

    完整的小提琴:http://jsfiddle.net/corh2tqo/

    【讨论】:

    • 我明白,但我们根本不使用这样的模板。我们只需要它作为一个嵌入范围。即我们允许设计师现场编写一些设计。在这些情况下,动态引用数据有时会有所帮助。 {{localVarName.fullName}} 在这些情况下,内部模板是仍然是外部范围的一部分,通常只是带有一些注入的额外信息。根本不需要重复使用。 PS:为什么答案上的 cmets 没有以相同的方式格式化? :)
    • @mgoetzke 如果您没有在其他任何地方使用组件,那么您可以只编写纯 HTML 本身,并且不制作这些组件,为什么要增加复杂性而没有额外的收益。
    • 我们需要将数据绑定到组件,如示例中的 sen,外部组件数据在 my-component 子组件中绑定和扩充
    猜你喜欢
    • 2013-12-21
    • 1970-01-01
    • 2019-09-12
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多