mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-10 16:48:17 +08:00
163 lines
8.9 KiB
HTML
163 lines
8.9 KiB
HTML
<h2 id="选项-组合"><a href="#选项-组合" class="headerlink" title="选项 / 组合" data-scroll="">选项 / 组合</a></h2><h3 id="parent"><a href="#parent" class="headerlink" title="parent" data-scroll="">parent</a></h3><ul>
|
||
<li><p><strong>类型</strong>:<code>Vue instance</code></p>
|
||
</li>
|
||
<li><p><strong>详细</strong>:</p>
|
||
<p>指定已创建的实例之父实例,在两者之间建立父子关系。子实例可以用 <code>this.$parent</code> 访问父实例,子实例被推入父实例的 <code>$children</code> 数组中。</p>
|
||
<p class="tip">节制地使用 <code>$parent</code> 和 <code>$children</code> - 它们的主要目的是作为访问组件的应急方法。更推荐用 props 和 events 实现父子组件通信</p>
|
||
|
||
</li>
|
||
</ul>
|
||
<h3 id="mixins"><a href="#mixins" class="headerlink" title="mixins" data-scroll="">mixins</a></h3><ul>
|
||
<li><p><strong>类型</strong>:<code>Array<Object></code></p>
|
||
</li>
|
||
<li><p><strong>详细</strong>:</p>
|
||
<p><code>mixins</code> 选项接受一个混入对象的数组。这些混入实例对象可以像正常的实例对象一样包含选项,他们将在 <code>Vue.extend()</code> 里最终选择使用相同的选项合并逻辑合并。举例:如果你的混入包含一个钩子而创建组件本身也有一个,两个函数将被调用。</p>
|
||
<p>Mixin 钩子按照传入顺序依次调用,并在调用组件自身的钩子之前被调用。</p>
|
||
</li>
|
||
<li><p><strong>示例</strong>:</p>
|
||
<pre><code class="hljs js"><span class="hljs-keyword">var</span> mixin = {
|
||
<span class="hljs-attr">created</span>: <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{ <span class="hljs-built_in">console</span>.log(<span class="hljs-number">1</span>) }
|
||
}
|
||
<span class="hljs-keyword">var</span> vm = <span class="hljs-keyword">new</span> Vue({
|
||
<span class="hljs-attr">created</span>: <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{ <span class="hljs-built_in">console</span>.log(<span class="hljs-number">2</span>) },
|
||
<span class="hljs-attr">mixins</span>: [mixin]
|
||
})
|
||
<span class="hljs-comment">// => 1</span>
|
||
<span class="hljs-comment">// => 2</span></code></pre>
|
||
</li>
|
||
<li><p><strong>参考</strong>:<a href="guide/mixins.html">混入</a></p>
|
||
</li>
|
||
</ul>
|
||
<h3 id="extends"><a href="#extends" class="headerlink" title="extends" data-scroll="">extends</a></h3><ul>
|
||
<li><p><strong>类型</strong>:<code>Object | Function</code></p>
|
||
</li>
|
||
<li><p><strong>详细</strong>:</p>
|
||
<p>允许声明扩展另一个组件(可以是一个简单的选项对象或构造函数),而无需使用 <code>Vue.extend</code>。这主要是为了便于扩展单文件组件。</p>
|
||
<p>这和 <code>mixins</code> 类似。</p>
|
||
</li>
|
||
<li><p><strong>示例</strong>:</p>
|
||
<pre><code class="hljs js"><span class="hljs-keyword">var</span> CompA = { ... }
|
||
|
||
<span class="hljs-comment">// 在没有调用 `Vue.extend` 时候继承 CompA</span>
|
||
<span class="hljs-keyword">var</span> CompB = {
|
||
<span class="hljs-attr">extends</span>: CompA,
|
||
...
|
||
}</code></pre>
|
||
</li>
|
||
</ul>
|
||
<h3 id="provide-inject"><a href="#provide-inject" class="headerlink" title="provide / inject" data-scroll="">provide / inject</a></h3><blockquote>
|
||
<p>2.2.0 新增</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><p><strong>类型</strong>:</p>
|
||
<ul>
|
||
<li><strong>provide</strong>:<code>Object | () => Object</code></li>
|
||
<li><strong>inject</strong>:<code>Array<string> | { [key: string]: string | Symbol | Object }</code></li>
|
||
</ul>
|
||
</li>
|
||
<li><p><strong>详细</strong>:</p>
|
||
<p class="tip"><code>provide</code> 和 <code>inject</code> 主要为高阶插件/组件库提供用例。并不推荐直接用于应用程序代码中。</p>
|
||
|
||
<p>这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。如果你熟悉 React,这与 React 的上下文特性很相似。</p>
|
||
<p><code>provide</code> 选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的属性。在该对象中你可以使用 ES2015 Symbols 作为 key,但是只在原生支持 <code>Symbol</code> 和 <code>Reflect.ownKeys</code> 的环境下可工作。</p>
|
||
<p><code>inject</code> 选项应该是:</p>
|
||
<ul>
|
||
<li>一个字符串数组,或</li>
|
||
<li>一个对象,对象的 key 是本地的绑定名,value 是:<ul>
|
||
<li>在可用的注入内容中搜索用的 key (字符串或 Symbol),或</li>
|
||
<li>一个对象,该对象的:<ul>
|
||
<li><code>from</code> 属性是在可用的注入内容中搜索用的 key (字符串或 Symbol)</li>
|
||
<li><code>default</code> 属性是降级情况下使用的 value</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<blockquote>
|
||
<p>提示:<code>provide</code> 和 <code>inject</code> 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。</p>
|
||
</blockquote>
|
||
</li>
|
||
<li><p><strong>示例</strong>:</p>
|
||
<pre><code class="hljs js"><span class="hljs-comment">// 父级组件提供 'foo'</span>
|
||
<span class="hljs-keyword">var</span> Provider = {
|
||
<span class="hljs-attr">provide</span>: {
|
||
<span class="hljs-attr">foo</span>: <span class="hljs-string">'bar'</span>
|
||
},
|
||
<span class="hljs-comment">// ...</span>
|
||
}
|
||
|
||
<span class="hljs-comment">// 子组件注入 'foo'</span>
|
||
<span class="hljs-keyword">var</span> Child = {
|
||
<span class="hljs-attr">inject</span>: [<span class="hljs-string">'foo'</span>],
|
||
created () {
|
||
<span class="hljs-built_in">console</span>.log(<span class="hljs-keyword">this</span>.foo) <span class="hljs-comment">// => "bar"</span>
|
||
}
|
||
<span class="hljs-comment">// ...</span>
|
||
}</code></pre>
|
||
<p>利用 ES2015 Symbols、函数 <code>provide</code> 和对象 <code>inject</code>:</p>
|
||
<pre><code class="hljs js"><span class="hljs-keyword">const</span> s = <span class="hljs-built_in">Symbol</span>()
|
||
|
||
<span class="hljs-keyword">const</span> Provider = {
|
||
provide () {
|
||
<span class="hljs-keyword">return</span> {
|
||
[s]: <span class="hljs-string">'foo'</span>
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="hljs-keyword">const</span> Child = {
|
||
<span class="hljs-attr">inject</span>: { s },
|
||
<span class="hljs-comment">// ...</span>
|
||
}</code></pre>
|
||
<blockquote>
|
||
<p>接下来 2 个例子只工作在 Vue 2.2.1 或更高版本。低于这个版本时,注入的值会在 <code>props</code> 和 <code>data</code> 初始化之后得到。</p>
|
||
</blockquote>
|
||
<p>使用一个注入的值作为一个属性的默认值:</p>
|
||
<pre><code class="hljs js"><span class="hljs-keyword">const</span> Child = {
|
||
<span class="hljs-attr">inject</span>: [<span class="hljs-string">'foo'</span>],
|
||
<span class="hljs-attr">props</span>: {
|
||
<span class="hljs-attr">bar</span>: {
|
||
<span class="hljs-keyword">default</span> () {
|
||
<span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.foo
|
||
}
|
||
}
|
||
}
|
||
}</code></pre>
|
||
<p>使用一个注入的值作为数据入口:</p>
|
||
<pre><code class="hljs js"><span class="hljs-keyword">const</span> Child = {
|
||
<span class="hljs-attr">inject</span>: [<span class="hljs-string">'foo'</span>],
|
||
data () {
|
||
<span class="hljs-keyword">return</span> {
|
||
<span class="hljs-attr">bar</span>: <span class="hljs-keyword">this</span>.foo
|
||
}
|
||
}
|
||
}</code></pre>
|
||
<blockquote>
|
||
<p>在 2.5.0+ 的注入可以通过设置默认值使其变成可选项:</p>
|
||
</blockquote>
|
||
<pre><code class="hljs js"><span class="hljs-keyword">const</span> Child = {
|
||
<span class="hljs-attr">inject</span>: {
|
||
<span class="hljs-attr">foo</span>: { <span class="hljs-attr">default</span>: <span class="hljs-string">'foo'</span> }
|
||
}
|
||
}</code></pre>
|
||
<p>如果它需要从一个不同名字的属性注入,则使用 <code>from</code> 来表示其源属性:</p>
|
||
<pre><code class="hljs js"><span class="hljs-keyword">const</span> Child = {
|
||
<span class="hljs-attr">inject</span>: {
|
||
<span class="hljs-attr">foo</span>: {
|
||
<span class="hljs-attr">from</span>: <span class="hljs-string">'bar'</span>,
|
||
<span class="hljs-attr">default</span>: <span class="hljs-string">'foo'</span>
|
||
}
|
||
}
|
||
}</code></pre>
|
||
<p>与 prop 的默认值类似,你需要对非原始值使用一个工厂方法:</p>
|
||
<pre><code class="hljs js"><span class="hljs-keyword">const</span> Child = {
|
||
<span class="hljs-attr">inject</span>: {
|
||
<span class="hljs-attr">foo</span>: {
|
||
<span class="hljs-attr">from</span>: <span class="hljs-string">'bar'</span>,
|
||
<span class="hljs-attr">default</span>: <span class="hljs-function"><span class="hljs-params">()</span> =></span> [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>]
|
||
}
|
||
}
|
||
}</code></pre>
|
||
</li>
|
||
</ul>
|