提交 4e960046 编写于 作者: W wizardforcel

2020-06-24 16:29:53

上级 67cb8acf
......@@ -98,7 +98,7 @@
1. 将列出构建文件中定义的所有目标名称,并且仅检查默认目标。 点击“运行”,选择要执行的所有目标。
2. 在“目标执行顺序”框中,将从上一步中选择的所有目标按执行顺序列出。
3. 如果您想更改订单,请点击“订单...”。 这将打开“订单目标”弹出窗口。
3. 如果您想更改顺序,请点击“顺序...”。 这将打开“顺序目标”弹出窗口。
4. 我们可以通过选择目标并相应地单击“上”或“下”按钮来在此弹出窗口中指定目标执行顺序。 点击“确定”以确认最终的执行顺序。
5. 完成所有操作后,点击“应用”和“运行”
......
# 2.模板语法和反应的一瞥
# 2.模板语法和反应的一瞥
> 原文: [https://javabeginnerstutorial.com/js/vue-js/2-template-syntax-reactivity/](https://javabeginnerstutorial.com/js/vue-js/2-template-syntax-reactivity/)
嘿! 欢迎阅读关于 Vue 的另一篇有趣的文章! 我们不仅要了解模板语法,还可以了解 Vue 的反应。 这似乎就像我们之前的文章“[Hello World with Vue.js](https://javabeginnerstutorial.com/js/vue-js/1-hello-world-with-vue-js/) ”的继续。 因此,请确保您快速浏览一下,以了解我们到目前为止讨论的内容。 请参阅 [GitHub 仓库](https://github.com/JBTAdmin/vuejs)中的代码。
嘿! 欢迎阅读关于 Vue 的另一篇有趣的文章! 我们不仅要了解模板语法,还可以了解 Vue 的反应。 这似乎就像我们之前的文章“[Hello World with Vue.js](https://javabeginnerstutorial.com/js/vue-js/1-hello-world-with-vue-js/) ”的继续。 因此,请确保您快速浏览一下,以了解我们到目前为止讨论的内容。 请参阅 [GitHub 仓库](https://github.com/JBTAdmin/vuejs)中的代码。
还记得我们如何在 HTML 代码中使用两个花括号将数据呈现到 DOM 吗? 让我们深入了解它,以了解 Vue 如何在引擎盖下工作。
......@@ -29,10 +29,69 @@ var app = new Vue({
每当遇到模板语法时,Vue 都会自动查看其数据属性的对象,并将相应的值呈现给 DOM。
您是否注意到我已将 Vue 实例分配给变量“`app`”? 下一节将使用它来演示 Vue 附带的一些反应
您是否注意到我已将 Vue 实例分配给变量“`app`”? 下一节将使用它来演示 Vue 附带的一些反应
到目前为止的输出是(就像我们在上一篇文章中看到的那样),
![Vue.js output](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20983%20480'%3E%3C/svg%3E)
![Vue.js output](img/6db1fd39a9ccc23d42cc746ed9c95ad8.png)
<noscript><img alt="Vue.js output" class="alignnone size-full wp-image-13685" height="480" src="img/6db1fd39a9ccc23d42cc746ed9c95ad8.png" width="983"/><h2><strong>一窥 Vue 的反应性</strong></h2><p><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"> </span> <span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"> <span class="ezoic-ad" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"> </span> </span>如果您认为使用模板语法进行渲染本身很棒,那么就准备惊讶吧! 因为 Vue 是<strong>反应性</strong></p><p><em>反应性</em>实际是什么意思? 我们知道,在 Vue 实例中指定的数据链接到 HTML 代码中“el”范围内所引用的任何位置。 Vue 不仅<strong>会在被引用的 DOM 中呈现</strong>数据,而且<strong>每当在数据对象中更改其值时也会更新</strong></p><p>很难缠住头吗? 然后,让我们看到所有这些实时发生的反应。</p><li>在 Chrome 浏览器中打开 DevTools(快捷方式:F12)。</li><li>点击“控制台”。</li><li>记住,我们将整个 Vue 实例分配给变量“app”。 因此,要从数据对象访问“消息”,只需键入<code data-enlighter-language="js">app.message = "Hey Vue, what's up?"</code></li><li>并且不要忘记单击“控制台”部分中的“<strong>输入</strong>”以查看其运行情况。</li><p><img alt="reactivity in action" class="alignnone size-full wp-image-13732" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/08/3_ReactivityInAction-1.jpg" height="363" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20356%20363'%3E%3C/svg%3E" width="356"/></p><noscript><img alt="reactivity in action" class="alignnone size-full wp-image-13732" height="363" src="img/a5f2cebad59f4377dc2a4483d01e4f09.png" width="356"/><h3><strong> <em>注意:</em> </strong></h3><p><em>您也可以这样做<code data-enlighter-language="js">app.$data.message = "Hey Vue, what's up?"</code> </em></p><p><em>,然后单击“Enter”。 它将正常工作。 在即将发布的系列文章中,我们将回答您在太阳下遇到的每个“为什么”和“如何”问题。 现在,只知道这是访问<code>message</code>属性的另一种方法。 </em></p><p>请记住,可以在多个位置引用数据,并且可以在每个位置自动更新数据。 让我们也尝试一下!</p><p><code>index.html</code>文件的<code>&lt;div&gt;</code>部分的代码更新为</p><pre><code class="language-html">&lt;div id="app"&gt; &lt;h1&gt;Hey {{ message }}!&lt;/h1&gt; &lt;hr/&gt; &lt;p&gt;This is my first {{ message }} app.&lt;/p&gt; &lt;p&gt;I successfully understood {{ message }}'s reactivity.&lt;/p&gt; &lt;/div&gt; </code></pre><p>另外,让我们将<code>index.js</code>文件中<code>message</code>属性的值更改为“Vue”,而不是“Hello World !!!”。 只是为了使这些句子更有意义。</p><pre><code class="language-javascript">var app = new Vue({ el: "#app", data: { message: "Vue" } });</code></pre><p>现在,让我们看一下输出。</p><p><img alt="Template syntax output" class="alignnone size-full wp-image-13730" data-lazy-sizes="(max-width: 919px) 100vw, 919px" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/08/1_MultipleRendering-1.jpg" data-lazy-srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/08/1_MultipleRendering-1.jpg 919w, https://javabeginnerstutorial.com/wp-content/uploads/2018/08/1_MultipleRendering-1-300x173.jpg 300w, https://javabeginnerstutorial.com/wp-content/uploads/2018/08/1_MultipleRendering-1-768x443.jpg 768w" height="530" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20919%20530'%3E%3C/svg%3E" width="919"/></p><noscript><img alt="Template syntax output" class="alignnone size-full wp-image-13730" height="530" sizes="(max-width: 919px) 100vw, 919px" src="img/f0ca1d3ada6af3aff784a475696db25b.png" srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/08/1_MultipleRendering-1.jpg 919w, https://javabeginnerstutorial.com/wp-content/uploads/2018/08/1_MultipleRendering-1-300x173.jpg 300w, https://javabeginnerstutorial.com/wp-content/uploads/2018/08/1_MultipleRendering-1-768x443.jpg 768w" width="919"/><p>是时候在多个地方看到一些反应发生了。 和以前一样,让我们​​在 Chrome 浏览器的 DevTools 控制台中更改<code>message</code>属性的值。</p><p><img alt="Reactivity at multiple places" class="alignnone size-full wp-image-13731" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/08/2_MultipleReactivity-1.jpg" height="390" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20421%20390'%3E%3C/svg%3E" width="421"/></p><noscript><img alt="Reactivity at multiple places" class="alignnone size-full wp-image-13731" height="390" src="img/ad819e5f91d3748a6b02ab6da1e50ab5.png" width="421"/><p>当您按下<code>Enter</code>时,在我们的 HTML 代码中引用<code>message</code>的每个位置都将立即更新为新值“vue.js”,这就是您现在在 DOM 中看到的内容。</p><p>这不仅令人惊讶吗? 是的,这就是我们忙于玩 Candy Crush 时 Vue 团队或 Evan You 所要做的! 在本系列教程中,我们将看到更多示例,以各种其他方式展示了反应性。</p><p>试想一下,如果您使用香草 JavaScript 或 jQuery 实现类似这样的功能,将需要多少编码!</p><p>话虽如此,我请假。 祝您有美好的一天!</p><p> </p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/3-vue-directives/" title="3\. Introduction to Vue directives"> 3\. Vue 指令简介</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
## **一窥 Vue 的反应式**
如果您认为使用模板语法进行渲染本身很棒,那么就准备惊讶吧! 因为 Vue 是**反应式**
*反应式*实际是什么意思? 我们知道,在 Vue 实例中指定的数据链接到 HTML 代码中“`el`”范围内所引用的任何位置。 Vue 不仅**会在被引用的 DOM 中呈现**数据,而且**每当在数据对象中更改其值时也会更新**
很难缠住头吗? 然后,让我们看到所有这些实时发生的反应。
* 在 Chrome 浏览器中打开 DevTools(快捷方式:`F12`)。
* 点击“控制台”。
* 记住,我们将整个 Vue 实例分配给变量“`app`”。 因此,要从数据对象访问“消息”,只需键入`app.message = "Hey Vue, what's up?"`
* 并且不要忘记单击“控制台”部分中的“**输入**”以查看其运行情况。
![reactivity in action](img/a5f2cebad59f4377dc2a4483d01e4f09.png)
### **注意:**
*您也可以这样做`app.$data.message = "Hey Vue, what's up?"`*
然后单击“`Enter`”。 它将正常工作。 在即将发布的系列文章中,我们将回答您在太阳下遇到的每个“为什么”和“如何”问题。 现在,只知道这是访问`message`属性的另一种方法。
请记住,可以在多个位置引用数据,并且可以在每个位置自动更新数据。 让我们也尝试一下!
`index.html`文件的`<div>`部分的代码更新为
```html
<div id="app">
<h1>Hey {{ message }}!</h1>
<hr/>
<p>This is my first {{ message }} app.</p>
<p>I successfully understood {{ message }}'s reactivity.</p>
</div>
```
另外,让我们将`index.js`文件中`message`属性的值更改为“`Vue`”,而不是“`Hello World !!!`”。 只是为了使这些句子更有意义。
```javascript
var app = new Vue({
el: "#app",
data: {
message: "Vue"
}
});
```
现在,让我们看一下输出。
![Template syntax output](img/f0ca1d3ada6af3aff784a475696db25b.png)
是时候在多个地方看到一些反应发生了。 和以前一样,让我们​​在 Chrome 浏览器的 DevTools 控制台中更改`message`属性的值。
![Reactivity at multiple places](img/ad819e5f91d3748a6b02ab6da1e50ab5.png)
当您按下`Enter`时,在我们的 HTML 代码中引用`message`的每个位置都将立即更新为新值“`Vue`”,这就是您现在在 DOM 中看到的内容。
这不仅令人惊讶吗? 是的,这就是我们忙于玩 Candy Crush 时 Vue 团队或 Evan You 所要做的! 在本系列教程中,我们将看到更多示例,以各种其他方式展示了反应式。
试想一下,如果您使用香草 JavaScript 或 jQuery 实现类似这样的功能,将需要多少编码!
话虽如此,我请假。 祝您有美好的一天!
......@@ -69,6 +69,10 @@ var app = new Vue({
`greet()`函数返回的标题和值都将为“`Hi!`”。 因为一旦`message`的值更改,所有出现的事件都会被重新渲染。 这是默认行为。
![without Vue Directives](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20784%20616'%3E%3C/svg%3E)
![without Vue Directives](img/b61c39cadd45c6bced82a8933db8cda1.png)
<noscript><img alt="without Vue Directives" class="alignnone size-full wp-image-13962" height="616" src="img/b61c39cadd45c6bced82a8933db8cda1.png" width="784"/><p><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"> </span> <span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"> <span class="ezoic-ad" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"> </span> </span>但是,在某些情况下,即使稍后更改属性,您可能仍要显示其初始值。 这是指令生效的地方。 在我们的场景中,我们希望显示<code>message</code>属性的初始值“嗨,大家好!” 作为标题。 因此,通过将指令 v-once 添加到<code>&lt;h1&gt;</code>元素,该元素内部的所有内容将仅呈现一次。 稍后通过<code>&lt;p&gt;</code>元素中的<code>greet()</code>方法对其进行更改时,将不会对其进行更新。</p><p><img alt="With Vue directives" class="alignnone size-full wp-image-13963" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/09/2_vOnce.jpg" height="591" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20788%20591'%3E%3C/svg%3E" width="788"/></p><noscript><img alt="With Vue directives" class="alignnone size-full wp-image-13963" height="591" src="img/86f997c82e065ce6c4461f4bd6bd5bfb.png" width="788"/><p>与往常一样,所有代码文件都可以在<a href="https://github.com/JBTAdmin/vuejs"> GitHub 仓库</a>中找到。 请随意创建您自己的副本,以尝试使用<code>v-once</code>指令。 不要忘记让您的想象力疯狂。 再见!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/4-vue-devtools-setup/" title="4\. Vue Devtools Setup"> 4\. Vue Devtools 设置</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
但是,在某些情况下,即使稍后更改属性,您可能仍要显示其初始值。 这是指令生效的地方。 在我们的场景中,我们希望显示`message`属性的初始值“`Hi everyone!`” 作为标题。 因此,通过将指令`v-once`添加到`<h1>`元素,该元素内部的所有内容将仅呈现一次。 稍后通过`<p>`元素中的`greet()`方法对其进行更改时,将不会对其进行更新。
![With Vue directives](img/86f997c82e065ce6c4461f4bd6bd5bfb.png)
与往常一样,所有代码文件都可以在 [GitHub 仓库](https://github.com/JBTAdmin/vuejs)中找到。 请随意创建您自己的副本,以尝试使用`v-once`指令。 不要忘记让您的想象力疯狂。 再见!
......@@ -10,4 +10,44 @@
访问 [chrome 网上商店](https://chrome.google.com/webstore/category/extensions),然后在搜索栏中输入“`vue devtools`”。
<noscript><img alt="Chrome web store" class="alignnone size-full wp-image-13984" height="367" src="img/4256a8735003b689a7a0a0c2ed60bb90.png" width="517"/><p>点击显示的第一个建议“vue devtools”,或仅按“Enter”。</p><h2><strong>步骤 2:</strong></h2><p>点击“添加到 Chrome 浏览器”按钮,如下图所示。</p><p><img alt="Vue Devtools extension" class="alignnone size-full wp-image-13985" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/2_addToChrome-1.jpg" height="272" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20952%20272'%3E%3C/svg%3E" width="952"/></p><noscript><img alt="Vue Devtools extension" class="alignnone size-full wp-image-13985" height="272" src="img/1fce0ff1ca3fdd876e9642754ef586ad.png" width="952"/><p>您将看到一个弹出窗口,要求某些权限。 点击“添加扩展名”按钮进行确认。</p><p><img alt="Devtools add confirmation" class="alignnone size-full wp-image-13986" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/3_addExtensionConfirmation-1.jpg" height="272" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20818%20272'%3E%3C/svg%3E" width="818"/></p><noscript><img alt="Devtools add confirmation" class="alignnone size-full wp-image-13986" height="272" src="img/7792dae54eeb1af22e79a5dc410258b9.png" width="818"/><h3><strong>步骤 3:</strong></h3><p><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"> </span> <span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"> <span class="ezoic-ad ezoic-adl" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"> </span> </span>添加扩展名后,您会注意到一条确认消息以及一个小的快捷方式,如下所示。</p><p><img alt="Devtools add confirmation" class="alignnone size-full wp-image-13987" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/4_ExtnAdded.jpg" height="279" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201286%20279'%3E%3C/svg%3E" width="1286"/></p><noscript><img alt="Devtools add confirmation" class="alignnone size-full wp-image-13987" height="279" src="img/2e15d96fa5404165697eec4ed89ae97b.png" width="1286"/><p>瞧! 您的 Chrome 浏览器中已安装 Vue Devtools !!</p><p>让我们尝试启动一个页面,看看是否启用了此快捷方式。 换句话说,它变成了彩色? 这表明正在检测到 Vue.js,我们可以开始使用它。 我正在 chrome 浏览器中打开我们刚刚安装了 devtools 扩展程序的<a href="https://javabeginnerstutorial.com/vue-js/3-vue-directives/">先前文章</a>中讨论的<a href="https://github.com/JBTAdmin/vuejs/blob/master/03_Introduction%20to%20Vue%20directives/index.html"> index.html 文件</a></p><p>如果快捷方式仍处于禁用状态,则不要惊慌,单击该快捷方式将显示“Vue.js not found”。</p><p><img alt="Vue not detected" class="alignnone size-full wp-image-13988" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/5_VueNotDetected.jpg" height="247" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20428%20247'%3E%3C/svg%3E" width="428"/></p><noscript><img alt="Vue not detected" class="alignnone size-full wp-image-13988" height="247" src="img/0496f07d0e0285251afcd2183e991e65.png" width="428"/><p>这是因为我们正在从系统中打开 HTML 文件,并且未将其部署在任何服务器上,即我们正在使用文件 URL。 只需看一下地址栏,您会发现地址以<code>file:///</code>开头。</p><p>解决此问题的简单方法是右键单击快捷方式-&gt;选择“管理扩展名”,然后打开“允许访问文件 URL”切换按钮。</p><p><img alt="Devtools allow access" class="alignnone size-full wp-image-13982" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/7_AllowAcessToFileUrls.jpg" height="260" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20697%20260'%3E%3C/svg%3E" width="697"/></p><noscript><img alt="Devtools allow access" class="alignnone size-full wp-image-13982" height="260" src="img/06734acb15bbd845e521b820b6f1994f.png" width="697"/><p>现在,使用文件 URL 刷新页面,将按预期检测到 Vue.js。 要查看 Root 实例和数据对象,请打开 chrome 开发人员工具(按键盘上的<strong> F12 </strong>),然后在 Vue 面板上单击。</p><p><img alt="Vue panel" class="alignnone size-full wp-image-13983" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/8_VuePanel.jpg" height="505" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20717%20505'%3E%3C/svg%3E" width="717"/></p><noscript><img alt="Vue panel" class="alignnone size-full wp-image-13983" height="505" src="img/1ea94fc972478ebd1eaad7ac4a96c3f9.png" width="717"/><p>完全不了解当前 Vue 面板中显示的所有内容绝对可以。 我们将讨论各个方面,并与他们合作。</p><p>再见,祝您有美好的一天!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/5-data-binding-p1/" title="5\. Data binding Part 1 (Text, raw HTML, JavaScript expressions)"> 5.数据绑定第 1 部分(文本,原始 HTML,JavaScript 表达式)</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
![Chrome web store](img/4256a8735003b689a7a0a0c2ed60bb90.png)
点击显示的第一个建议“`vue devtools`”,或仅按“`Enter`”。
## **步骤 2:**
点击“添加到 Chrome 浏览器”按钮,如下图所示。
![Vue Devtools extension](img/1fce0ff1ca3fdd876e9642754ef586ad.png)
您将看到一个弹出窗口,要求某些权限。 点击“添加扩展名”按钮进行确认。
![Devtools add confirmation](img/7792dae54eeb1af22e79a5dc410258b9.png)
### **步骤 3:**
添加扩展名后,您会注意到一条确认消息以及一个小的快捷方式,如下所示。
![Devtools add confirmation](img/2e15d96fa5404165697eec4ed89ae97b.png)
瞧! 您的 Chrome 浏览器中已安装 Vue Devtools !!
让我们尝试启动一个页面,看看是否启用了此快捷方式。 换句话说,它变成了彩色? 这表明正在检测到 Vue.js,我们可以开始使用它。 我正在 chrome 浏览器中打开我们刚刚安装了 devtools 扩展程序的[先前文章](https://javabeginnerstutorial.com/vue-js/3-vue-directives/)中讨论的[`index.html`文件](https://github.com/JBTAdmin/vuejs/blob/master/03_Introduction%20to%20Vue%20directives/index.html)
如果快捷方式仍处于禁用状态,则不要惊慌,单击该快捷方式将显示“Vue.js not found”。
![Vue not detected](img/0496f07d0e0285251afcd2183e991e65.png)
这是因为我们正在从系统中打开 HTML 文件,并且未将其部署在任何服务器上,即我们正在使用文件 URL。 只需看一下地址栏,您会发现地址以`file:///`开头。
解决此问题的简单方法是右键单击快捷方式,选择“管理扩展名”,然后打开“允许访问文件 URL”切换按钮。
![Devtools allow access](img/06734acb15bbd845e521b820b6f1994f.png)
现在,使用文件 URL 刷新页面,将按预期检测到 Vue.js。 要查看 Root 实例和数据对象,请打开 chrome 开发人员工具(按键盘上的`F12`),然后在 Vue 面板上单击。
![Vue panel](img/1ea94fc972478ebd1eaad7ac4a96c3f9.png)
完全不了解当前 Vue 面板中显示的所有内容绝对可以。 我们将讨论各个方面,并与他们合作。
再见,祝您有美好的一天!
......@@ -12,6 +12,94 @@
默认情况下,Vue 始终将模板语法中的数据视为纯文本。 在大多数情况下,这正是我们想要的。 但是,编码完全是旅途中意外的转折。 如果有一天我们想传递原始 HTML 并相应地在 DOM 中呈现该怎么办? 当然,您不能使用那些双花括号,因为如果这样做,您将得到。
![data binding raw HTML](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20995%20516'%3E%3C/svg%3E)
![data binding raw HTML](img/70ef2d5460c92c8046ff872d1c287630.png)
<noscript><img alt="data binding raw HTML" class="alignnone size-full wp-image-14050" height="516" sizes="(max-width: 995px) 100vw, 995px" src="img/70ef2d5460c92c8046ff872d1c287630.png" srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/1_raw-html-as-text.jpg 995w, https://javabeginnerstutorial.com/wp-content/uploads/2018/10/1_raw-html-as-text-300x156.jpg 300w, https://javabeginnerstutorial.com/wp-content/uploads/2018/10/1_raw-html-as-text-768x398.jpg 768w" width="995"/><p>并不奇怪吗? 整个 HTML 代码呈现为纯文本。 这就是模板语法的工作方式,并且这种行为可以防止任何第三方将不需要的代码注入您的网站(多么可怕?!)。 因此,切勿在用户无法控制的用户提供的内容上使用此功能。 因此,如果您真的相信提供 HTML 代码的源代码是安全的,并希望将其呈现给 DOM,请使用另一个指令<strong> v-html </strong></p><p><img alt="v-html" class="alignnone size-full wp-image-14051" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/2_raw-html-rendered-1.jpg" height="491" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20999%20491'%3E%3C/svg%3E" width="999"/></p><noscript><img alt="v-html" class="alignnone size-full wp-image-14051" height="491" src="img/6a0607653cf9dc089d2f8898879809a8.png" width="999"/><p>使用<strong> v-html </strong>指令会将<code>&lt;span&gt;</code>标记的内容替换为<code>vueLink</code>数据属性的值,并将其解释为纯 HTML。 因此,超链接以指定的绿色显示。</p><h2><strong>使用 JavaScript 表达式</strong></h2><p>双花括号以及显示纯文本还可以评估<strong> <em>单个</em> </strong> JavaScript 表达式。</p><p>请记住,<strong>仅是单个表达式</strong>。 不是语句,不是流控件,不是任何用户定义的全局变量! 让我们来看一些例子</p><ol><li>可以始终在模板语法中访问“message”属性的值。 现在,我们可以对其应用任何可用的 JavaScript String 方法。</li></ol><pre><code class="language-javascript">{{ message.length }}</code></pre><ol start="2"><li>js 允许访问模板表达式中的几个全局对象,即 Math 和 Date。 小心,不允许访问用户定义的全局变量。</li></ol><pre><code class="language-javascript">{{ Math.PI }} {{ new Date() }}</code></pre><ol start="3"><li>流控制语句(如 if-else,for,while,do-while 等)将不起作用,因此剩下的唯一选择是使用三元表达式。 始终建议将复杂的逻辑放入我们将在以后的文章中详细讨论的方法中。</li></ol><pre><code class="language-javascript">{{ message === "Hi everyone!" ? "Welcome to the World of Vue" : "Hola" }}</code></pre><p><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"> </span> <span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"> <span class="ezoic-ad" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"> </span> </span>此外,如前所述,在模板语法内只能使用单个表达式。 即使是一个简单的表达式也无法使用,例如“让等级= 1”。</p><p>完整的代码如下,</p><h3>Index.html</h3><pre><code class="language-html">&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Hello Vue!&lt;/title&gt; &lt;!-- including Vue with development version CDN --&gt; &lt;script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="app"&gt; &lt;!-- text interpolations --&gt; &lt;h1&gt;{{ message }}&lt;/h1&gt; &lt;p&gt;For more info. on Vue, click {{ vueLink }}&lt;/p&gt; &lt;!-- raw HTML interpolation --&gt; &lt;p&gt;With v-html directive:&lt;/br&gt; For more info. on Vue, click &lt;span v-html="vueLink"&gt;&lt;/span&gt; &lt;/p&gt; &lt;!-- JavaScript expressions --&gt; &lt;p&gt; Length of the 'message' String: {{ message.length }} &lt;/br&gt; Value of PI: {{ Math.PI }} &lt;/br&gt; Today's date is: {{ new Date() }} &lt;/br&gt; Result of ternary expression is: {{ message === "Hi everyone!" ? "Welcome to the World of Vue" : "Hola" }} &lt;/br&gt; &lt;/p&gt; &lt;/div&gt; &lt;!-- including index.js file --&gt; &lt;script src="index.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt;</code></pre><h3>Index.js</h3><pre><code class="language-javascript">var app = new Vue({ el: "#app", data: { message: "Hi everyone!", vueLink: "&lt;a href='https://vuejs.org/' style='color:green'&gt;here&lt;/a&gt;" } });</code></pre><p>输出如下,</p><p><img alt="Using JavaScript expressions" class="alignnone size-full wp-image-14052" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/3_JS-expr.jpg" height="511" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201126%20511'%3E%3C/svg%3E" width="1126"/></p><noscript><img alt="Using JavaScript expressions" class="alignnone size-full wp-image-14052" height="511" src="img/b723c5b8f6cfc7058907ba787ddf98ee.png" width="1126"/><p>上面讨论的所有代码都可以在<a href="https://github.com/JBTAdmin/vuejs"> GitHub 仓库</a>中找到。</p><p>在我请假之前,让我先给您的大脑一个小任务。 我们无法在 HTML 属性中使用此模板/胡子语法。 您能想到其他选择吗? 我相信你可以!</p><p>祝你今天愉快 ?</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/6-data-binding-p2/" title="6\. Data binding Part 2 (Attributes)"> 6.数据绑定第 2 部分(属性)</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
并不奇怪吗? 整个 HTML 代码呈现为纯文本。 这就是模板语法的工作方式,并且这种行为可以防止任何第三方将不需要的代码注入您的网站(多么可怕?!)。 因此,切勿在用户无法控制的用户提供的内容上使用此功能。 因此,如果您真的相信提供 HTML 代码的源代码是安全的,并希望将其呈现给 DOM,请使用另一个指令`v-html`
![v-html](img/6a0607653cf9dc089d2f8898879809a8.png)
使用`v-html`指令会将`<span>`标记的内容替换为`vueLink`数据属性的值,并将其解释为纯 HTML。 因此,超链接以指定的绿色显示。
## **使用 JavaScript 表达式**
双花括号以及显示纯文本还可以求值**单个** JavaScript 表达式。
请记住,**仅是单个表达式**。 不是语句,不是流控件,不是任何用户定义的全局变量! 让我们来看一些例子
1. 可以始终在模板语法中访问“`message`”属性的值。 现在,我们可以对其应用任何可用的 JavaScript `String`方法。
```javascript
{{ message.length }}
```
2. js 允许访问模板表达式中的几个全局对象,即`Math``Date`。 小心,不允许访问用户定义的全局变量。
```javascript
{{ Math.PI }} {{ new Date() }}
```
3. 流控制语句(如`if-else``for``while``do-while`等)将不起作用,因此剩下的唯一选择是使用三元表达式。 始终建议将复杂的逻辑放入我们将在以后的文章中详细讨论的方法中。
```javascript
{{ message === "Hi everyone!" ? "Welcome to the World of Vue" : "Hola" }}
```
此外,如前所述,在模板语法内只能使用单个表达式。 即使是一个简单的表达式也无法使用,例如“`let level = 1`”。
完整的代码如下,
### `Index.html`
```html
<!DOCTYPE html>
<html>
<head>
<title>Hello Vue!</title>
<!-- including Vue with development version CDN -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<!-- text interpolations -->
<h1>{{ message }}</h1>
<p>For more info. on Vue, click {{ vueLink }}</p>
<!-- raw HTML interpolation -->
<p>With v-html directive:</br>
For more info. on Vue, click <span v-html="vueLink"></span>
</p>
<!-- JavaScript expressions -->
<p>
Length of the 'message' String: {{ message.length }} </br>
Value of PI: {{ Math.PI }} </br>
Today's date is: {{ new Date() }} </br>
Result of ternary expression is:
{{ message === "Hi everyone!" ? "Welcome to the World of Vue" : "Hola" }} </br>
</p>
</div>
<!-- including index.js file -->
<script src="index.js"></script>
</body>
</html>
```
### `Index.js`
```javascript
var app = new Vue({
el: "#app",
data: {
message: "Hi everyone!",
vueLink: "<a href='https://vuejs.org/' style='color:green'>here</a>"
}
});
```
输出如下,
![Using JavaScript expressions](img/b723c5b8f6cfc7058907ba787ddf98ee.png)
上面讨论的所有代码都可以在 [GitHub 仓库](https://github.com/JBTAdmin/vuejs)中找到。
在我请假之前,让我先给您的大脑一个小任务。 我们无法在 HTML 属性中使用此模板/胡子语法。 您能想到其他选择吗? 我相信你可以!
祝你今天愉快 ?
......@@ -6,7 +6,7 @@
## 运算符优先级
*优先级*决定在同一计算中存在多个运算符的情况下,首先评估哪个运算符。
*优先级*决定在同一计算中存在多个运算符的情况下,首先求值哪个运算符。
## 运算符优先级表
......
......@@ -6,6 +6,122 @@
假设我们有一个锚标记,我们想将链接绑定到`href`属性。 让我们尝试使用文本插值技术(模板语法)来执行此操作,然后检查结果。
![Attribute binding with template syntax](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201043%20591'%3E%3C/svg%3E)
![Attribute binding with template syntax](img/1ed51c59dd82a5d6011f7e594f0eb2cc.png)
<noscript><img alt="Attribute binding with template syntax" class="alignnone size-full wp-image-14067" height="591" src="img/1ed51c59dd82a5d6011f7e594f0eb2cc.png" width="1043"/><p>失望了吗 这是发生了什么事。 正如预期的那样,“Vue 官方网站”文本已显示为超链接。 单击它会打开一个新选项卡,因为我们使用了<code>_blank</code>作为目标(这里没什么疯狂的)。 现在,查看地址栏中的 URL。 不会像在 Vue 实例的数据对象中指定的那样导航到<a href="https://vuejs.org/v2/guide/index.html"> https://vuejs.org/v2/guide/index.html </a>,而是处理<code>href</code>属性的双引号内的值 作为字符串并解析为 URL <code>“{{ vueLink }}”</code>。 这就是普通 HTML <code>href</code>属性的工作方式,这就是您在新打开的标签页的地址栏中看到的内容。 显然,绑定从未发生过。</p><p>因此,这就是 Vue 的工作方式。 我们不能将模板语法/大括号括起来用于 HTML 属性绑定。 但是,如果我们仍然想将某些东西动态绑定到属性上怎么办? 不要担心! Vue 附带了另一个用于此目的的指令<strong> v-bind </strong>。 只要我们花时间寻找指令,指令就在我们周围。</p><p>在这种情况下,使用 v-bind 指令告诉 Vue.js 将 data 属性的值绑定到该指令后面的属性名称。</p><h3><strong>语法,</strong></h3><p><code data-enlighter-language="html">v-bind:html_attribute=”data_to_be_bound”</code></p><h3><strong>示例,</strong></h3><p><code data-enlighter-language="html">v-bind:href="vueLink"</code></p><p>让我们尝试执行此代码并检查输出。</p><p><img alt="Attribute v-bind" class="alignnone size-full wp-image-14068" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/5_v-bind-href-1.jpg" height="589" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201061%20589'%3E%3C/svg%3E" width="1061"/></p><noscript><img alt="Attribute v-bind" class="alignnone size-full wp-image-14068" height="589" src="img/1c1eaeb83683a2a7a6da93a84bae0124.png" width="1061"/><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"></span><span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"><span class="ezoic-ad ezoic-adl" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"></span></span><p>奇迹般有效! 单击呈现的链接将打开一个新标签,该标签具有预期的指定链接。</p><h2><strong>其他示例场景</strong></h2><ol><li>在网页上动态显示图片,即,当在 Vue 实例的数据对象中更改图片位置时,应该在网页上自动更新图片。</li><li>根据绑定到该字段的数据值启用或禁用输入字段。</li></ol><p>让我们一次处理一种情况。 到最后,您将对 Vue.js 表现出超出预期的表现。</p><h3>1.动态显示图像</h3><p>让我们将 Vue 的徽标图像放置在与代码相同的文件夹中,并将其在数据对象中的位置指定为<code>logo</code>。 将<code>&lt;img&gt;</code>标记的<code>src</code>属性绑定到<code>logo</code>属性的值。</p><pre><code class="language-html">&lt;img v-bind:src="logo" width="70" height="50"/&gt;</code></pre><p>图像将按预期渲染到 DOM。 将您的帽子戴上戒指,并尝试更改图像位置是否动态更新渲染的图像。 如果您在执行此操作时遇到任何挑战,请在评论部分给我大喊。 输出如下,</p><p><img alt="v-bind image" class="alignnone size-full wp-image-14069" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/6_v-bind-img.jpg" height="497" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20833%20497'%3E%3C/svg%3E" width="833"/></p><noscript><img alt="v-bind image" class="alignnone size-full wp-image-14069" height="497" src="img/68590a95dc9a52eaf5e90bf9aeee24f6.png" width="833"/><h3>2.根据绑定的值启用或禁用输入字段</h3><p>是时候做同样的歌舞了!</p><p>在 Vue 实例的数据对象中,让我们拥有<code>“isInputDisabled”</code>属性,并将其值设置为<code>true</code></p><pre><code class="language-javascript">isInputDisabled: true</code></pre><p>让我们将其绑定到输入标签的 disable 属性。</p><pre><code class="language-html">&lt;input v-bind:disabled="isInputDisabled"/&gt;</code></pre><p>这会将禁用的属性绑定到所提到的属性的值,并禁用输入字段。 使用 Chrome 开发者工具检查该元素会显示其相应的 HTML 代码,如下所示,</p><p><img alt="v-bind input disabled" class="alignnone size-full wp-image-14070" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/7_v-bind-disabled-input-1.jpg" height="491" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20379%20491'%3E%3C/svg%3E" width="379"/></p><noscript><img alt="v-bind input disabled" class="alignnone size-full wp-image-14070" height="491" src="img/1360c77ec1d6e0f9343d6ac614a06dd7.png" width="379"/><p>现在让我们将<code>“isInputDisabled”</code>的值更改为<code>false</code></p><pre><code class="language-javascript">isInputDisabled: false</code></pre><p>有趣的是,如果禁用的属性值为<code>false</code><code>null</code><code>undefined</code>,则甚至不包含在呈现的<code>&lt;input&gt;</code>元素中(使用开发人员工具检查该元素)。</p><p><img alt="v-bind input enabled" class="alignnone size-full wp-image-14063" data-lazy-sizes="(max-width: 368px) 100vw, 368px" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/8_v-bind-enabled-input.jpg" data-lazy-srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/8_v-bind-enabled-input.jpg 368w, https://javabeginnerstutorial.com/wp-content/uploads/2018/10/8_v-bind-enabled-input-243x300.jpg 243w" height="454" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20368%20454'%3E%3C/svg%3E" width="368"/></p><noscript><img alt="v-bind input enabled" class="alignnone size-full wp-image-14063" height="454" sizes="(max-width: 368px) 100vw, 368px" src="img/8dd45bfd613195974e521992d039b42a.png" srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/10/8_v-bind-enabled-input.jpg 368w, https://javabeginnerstutorial.com/wp-content/uploads/2018/10/8_v-bind-enabled-input-243x300.jpg 243w" width="368"/><p>完整的代码如下,</p><h3>Index.html</h3><pre><code class="language-html">&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Hello Vue!&lt;/title&gt; &lt;!-- including Vue with development version CDN --&gt; &lt;script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="app"&gt; &lt;!-- text interpolations --&gt; &lt;h1&gt;{{ message }}&lt;/h1&gt; &lt;p&gt; &lt;input v-bind:disabled="isInputDisabled"/&gt; &lt;/p&gt; &lt;div&gt; &lt;img v-bind:src="logo" width="70" height="50"/&gt; &lt;br/&gt; &lt;a v-bind:href="vueLink" target="_blank"&gt;Vue official website&lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;!-- including index.js file --&gt; &lt;script src="index.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt;</code></pre><h3>Index.js</h3><pre><code class="language-javascript">var app = new Vue({ el: "#app", data: { message: "Hi", isInputDisabled: false, logo: "vueLogo.png", vueLink: "https://vuejs.org/v2/guide/index.html" } });</code></pre><p>上面讨论的所有代码都可以在<a href="https://github.com/JBTAdmin/vuejs"> GitHub 仓库</a>中找到。</p><p>启动您喜欢的 IDE,并编写一些自己的方案! 如有任何疑问,请随时在“评论”部分中进行提问。 另一个有趣的概念很快见!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/7-conditional-rendering-part-1/" title="7\. Conditional rendering Part 1 (v-if, v-else, v-else-if)"> 7.条件渲染第 1 部分(v-if,v-else,v-else-if)</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
失望了吗?这是发生了什么事。 正如预期的那样,“Vue 官方网站”文本已显示为超链接。 单击它会打开一个新选项卡,因为我们使用了`_blank`作为目标(这里没什么疯狂的)。 现在,查看地址栏中的 URL。 不会像在 Vue 实例的数据对象中指定的那样导航到 [https://vuejs.org/v2/guide/index.html](https://vuejs.org/v2/guide/index.html) ,而是处理`href`属性的双引号内的值 作为字符串并解析为 URL `“{{ vueLink }}”`。 这就是普通 HTML `href`属性的工作方式,这就是您在新打开的标签页的地址栏中看到的内容。 显然,绑定从未发生过。
因此,这就是 Vue 的工作方式。 我们不能将模板语法/大括号括起来用于 HTML 属性绑定。 但是,如果我们仍然想将某些东西动态绑定到属性上怎么办? 不要担心! Vue 附带了另一个用于此目的的指令`v-bind`。 只要我们花时间寻找指令,指令就在我们周围。
在这种情况下,使用`v-bind`指令告诉 Vue.js 将`data`属性的值绑定到该指令后面的属性名称。
### **语法,**
`v-bind:html_attribute=”data_to_be_bound”`
### **示例,**
`v-bind:href="vueLink"`
让我们尝试执行此代码并检查输出。
![Attribute v-bind](img/1c1eaeb83683a2a7a6da93a84bae0124.png)
奇迹般有效! 单击呈现的链接将打开一个新标签,该标签具有预期的指定链接。
## **其他示例场景**
1. 在网页上动态显示图片,即,当在 Vue 实例的数据对象中更改图片位置时,应该在网页上自动更新图片。
2. 根据绑定到该字段的数据值启用或禁用输入字段。
让我们一次处理一种情况。 到最后,您将对 Vue.js 表现出超出预期的表现。
### 1.动态显示图像
让我们将 Vue 的徽标图像放置在与代码相同的文件夹中,并将其在数据对象中的位置指定为`logo`。 将`<img>`标记的`src`属性绑定到`logo`属性的值。
```html
<img v-bind:src="logo" width="70" height="50"/>
```
图像将按预期渲染到 DOM。 将您的帽子戴上戒指,并尝试更改图像位置是否动态更新渲染的图像。 如果您在执行此操作时遇到任何挑战,请在评论部分给我大喊。 输出如下,
![v-bind image](img/68590a95dc9a52eaf5e90bf9aeee24f6.png)
### 2.根据绑定的值启用或禁用输入字段
是时候做同样的歌舞了!
在 Vue 实例的数据对象中,让我们拥有`“isInputDisabled”`属性,并将其值设置为`true`
```javascript
isInputDisabled: true
```
让我们将其绑定到输入标签的`disable`属性。
```html
<input v-bind:disabled="isInputDisabled"/>
```
这会将禁用的属性绑定到所提到的属性的值,并禁用输入字段。 使用 Chrome 开发者工具检查该元素会显示其相应的 HTML 代码,如下所示,
![v-bind input disabled](img/1360c77ec1d6e0f9343d6ac614a06dd7.png)
现在让我们将`“isInputDisabled”`的值更改为`false`
```javascript
isInputDisabled: false
```
有趣的是,如果禁用的属性值为`false``null``undefined`,则甚至不包含在呈现的`<input>`元素中(使用开发人员工具检查该元素)。
![v-bind input enabled](img/8dd45bfd613195974e521992d039b42a.png)
完整的代码如下,
### `Index.html`
```html
<!DOCTYPE html>
<html>
<head>
<title>Hello Vue!</title>
<!-- including Vue with development version CDN -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<!-- text interpolations -->
<h1>{{ message }}</h1>
<p>
<input v-bind:disabled="isInputDisabled"/>
</p>
<div>
<img v-bind:src="logo" width="70" height="50"/>
<br/>
<a v-bind:href="vueLink" target="_blank">Vue official website</a>
</div>
</div>
<!-- including index.js file -->
<script src="index.js"></script>
</body>
</html>
```
### `Index.js`
```javascript
var app = new Vue({
el: "#app",
data: {
message: "Hi",
isInputDisabled: false,
logo: "vueLogo.png",
vueLink: "https://vuejs.org/v2/guide/index.html"
}
});
```
上面讨论的所有代码都可以在 [GitHub 仓库](https://github.com/JBTAdmin/vuejs)中找到。
启动您喜欢的 IDE,并编写一些自己的方案! 如有任何疑问,请随时在“评论”部分中进行提问。 另一个有趣的概念很快见!
......@@ -8,6 +8,93 @@ Vue **指令**再来一次! 在这方面,我们有`v-if`,`v-else`和`v-els
首先,让我们有两个带有一些文本的段落标签,
![](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20599%20507'%3E%3C/svg%3E)
![](img/14aaafae94bb48d942bd3f553d948bfd.png)
<noscript><img alt="" class="alignnone size-full wp-image-14079" height="507" sizes="(max-width: 599px) 100vw, 599px" src="img/14aaafae94bb48d942bd3f553d948bfd.png" srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/1_Without-directives-1.jpg 599w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/1_Without-directives-1-300x254.jpg 300w" width="599"/><h2><strong> 1\. v-if 指令</strong></h2><p>使用<code>v-if</code>指令的语法如下:</p><pre><code class="language-html">&lt;HTML-tag v-if=”condition or expression that evaluates to true or false”&gt;</code></pre><p>如果条件为真/评估为真,则将渲染标签。</p><p>让我们向 Vue 实例的数据对象添加<code>display</code>属性,并为其赋予<code>false</code>值。</p><pre><code class="language-javascript">data: { message: "Hi", display: false } </code></pre><p>现在,将<code>v-if</code>指令添加到第一段标签中,并指定<code>display</code>条件,基于该条件,将不显示标签。</p><pre><code class="language-html">&lt;p v-if="display"&gt;Display evaluates to true&lt;/p&gt;</code></pre><p>由于<code>display</code>的值现在设置为<code>false</code>,因此不会呈现带有文本“<strong>显示评估为真</strong>”的第一个<code>&lt;p&gt;</code>标签。</p><p><img alt="v-if false condition" class="alignnone size-full wp-image-14081" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/3_v-if-false.jpg" height="507" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20666%20507'%3E%3C/svg%3E" width="666"/></p><noscript><img alt="v-if false condition" class="alignnone size-full wp-image-14081" height="507" src="img/683e241dceed1bc821e64308c0558eb1.png" width="666"/><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"></span><span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"><span class="ezoic-ad ezoic-adl" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"></span></span><p><code>display</code>值更改为<code>true</code>将呈现第一个<code>&lt;p&gt;</code>标签的内容。</p><p><img alt="conditional rendering v-if" class="alignnone size-full wp-image-14080" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/2_v-if-true.jpg" height="508" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20670%20508'%3E%3C/svg%3E" width="670"/></p><noscript><img alt="conditional rendering v-if" class="alignnone size-full wp-image-14080" height="508" src="img/b81014dd6939b1699e77e2dc0eef84b9.png" width="670"/><h2><strong> 2\. v-else 指令</strong></h2><p>假设您要在显示为<code>true</code>时显示第一个<code>&lt;p&gt;</code>标签,并在显示结果为<code>false</code>时显示第二个<code>&lt;p&gt;</code>标签。 在这种情况下,我们可以使用<code>v-else</code>指令。 它类似于<code>else</code>块。</p><pre><code class="language-html">&lt;p v-if="display"&gt;Display evaluates to true&lt;/p&gt; &lt;p v-else&gt;You always get to see me :)&lt;/p&gt;</code></pre><p><code>display</code>设为<code>true</code>时,将在<code>v-if</code>指令的条件评估为<code>true</code>的情况下呈现第一个<code>&lt;p&gt;</code>标签。</p><p><img alt="v-else true" class="alignnone size-full wp-image-14082" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/4_v-else-true-1.jpg" height="501" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20653%20501'%3E%3C/svg%3E" width="653"/></p><noscript><img alt="v-else true" class="alignnone size-full wp-image-14082" height="501" src="img/7d0940f1b5db61e3875cb2e2263d9f58.png" width="653"/><p><code>display</code>更改为<code>false</code>只会使用<code>v-else</code>伪指令呈现第二个<code>&lt;p&gt;</code>标签,如下所示,</p><p><img alt="v-else false condition" class="alignnone size-full wp-image-14083" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/5_v-else-false-1.jpg" height="502" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20663%20502'%3E%3C/svg%3E" width="663"/></p><noscript><img alt="v-else false condition" class="alignnone size-full wp-image-14083" height="502" src="img/0f65cbd6fe9e24b6e96377776a4ac52f.png" width="663"/><p><strong> <em>注意:</em> </strong> <em>具有<code>v-else</code>指令的 HTML 元素必须紧随具有<code>v-if</code>的元素。 否则,<code>v-else</code>元素将不会被识别。 换句话说,不要在<code>v-if</code>元素和<code>v-else</code>元素之间添加任何元素。 </em></p><p>可以在<code>&lt;div&gt;</code><code>&lt;template&gt;</code>等帮助下将这些指令添加到单个 HTML 元素或元素块中。考虑一种情况,您希望根据条件显示错误消息。 在这种情况下<code>if-else</code>块会派上用场。</p><h2><strong> 3\. v-else-if 指令</strong></h2><p>它也与<code>v-if</code>元素一起使用。 该指令充当“<strong> else-if </strong>”条件。 与其他任何编程语言一样,它可以链接多次。</p><p>让我们向数据对象添加<code>val</code>属性,并为其提供数值。</p><pre><code class="language-javascript">data: { message: "Hi", val: 5 }</code></pre><p><code>v-if</code><code>v-else-if</code><code>v-else</code>伪指令添加到三个<code>&lt;p&gt;</code>标签并添加条件。</p><pre><code class="language-html">&lt;p v-if="val &lt; 10"&gt;Val is less than 10&lt;/p&gt; &lt;p v-else-if="val &gt; 10 &amp;&amp; val &lt; 20"&gt;val is between 10 and 20&lt;/p&gt; &lt;p v-else&gt;Pretty high val!!&lt;/p&gt;</code></pre><p>现在,让我们更改<code>val</code>属性的值,并查看输出如何变化。</p><p>首先,将<code>val</code>设为<code>5</code>。 由于它小于 10,因此<code>v-if</code>条件评估为<code>true</code>并被渲染。</p><p><img alt="v-else-if first expression" class="alignnone size-full wp-image-14084" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/6_v-else-if-first-1.jpg" height="504" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20728%20504'%3E%3C/svg%3E" width="728"/></p><noscript><img alt="v-else-if first expression" class="alignnone size-full wp-image-14084" height="504" src="img/cb9ed33f1627c5ef3a74aed8e5c6292f.png" width="728"/><p>现在将<code>val</code>更改为<code>15</code><code>v-else-if</code>条件评估为<code>true</code>,并将其呈现到 DOM,如下所示。</p><p><img alt="v-else-if second expression" class="alignnone size-full wp-image-14085" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/7_v-else-if-second-1.jpg" height="502" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20771%20502'%3E%3C/svg%3E" width="771"/></p><noscript><img alt="v-else-if second expression" class="alignnone size-full wp-image-14085" height="502" src="img/29869b7f60d5b9f9d87511893e889e6b.png" width="771"/><p><code>val</code>更改为<code>90</code>会使<code>v-if</code><code>v-else-if</code>表达式均求值为<code>false</code>。 因此,将渲染<code>v-else</code>元素。</p><p><img alt="v-else-if third condtion" class="alignnone size-full wp-image-14086" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/8_v-else-if-third-1.jpg" height="501" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20731%20501'%3E%3C/svg%3E" width="731"/></p><noscript><img alt="v-else-if third condtion" class="alignnone size-full wp-image-14086" height="501" src="img/ba1ad56b6d8ad18480db60329a7bb779.png" width="731"/><p><strong> <em>注意:</em> </strong> <em>与 v-else 相似,带有 v-else-if 指令的元素必须紧随带有 v-if 或 v-else-if 的元素。 否则,将无法识别。 </em></p><p>上面讨论的所有代码都可以在<a href="https://github.com/JBTAdmin/vuejs"> GitHub 仓库</a>中找到。</p><p>是时候戴上开发人员的帽子,并尝试使用这些指令了! 祝你今天愉快。</p><p> </p><p> </p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/8-conditional-rendering-part-2/" title="8\. Conditional rendering Part 2 (v-if and v-show)"> 8.条件渲染第 2 部分(v-if 和 v-show)</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
## **1\. `v-if`指令**
使用`v-if`指令的语法如下:
```html
<HTML-tag v-if=”condition or expression that evaluates to true or false>
```
如果条件为真/求值为真,则将渲染标签。
让我们向 Vue 实例的数据对象添加`display`属性,并为其赋予`false`值。
```javascript
data: { message: "Hi", display: false }
```
现在,将`v-if`指令添加到第一段标签中,并指定`display`条件,基于该条件,将不显示标签。
```html
<p v-if="display">Display evaluates to true</p>
```
由于`display`的值现在设置为`false`,因此不会呈现带有文本“**显示求值为真**”的第一个`<p>`标签。
![v-if false condition](img/683e241dceed1bc821e64308c0558eb1.png)
`display`值更改为`true`将呈现第一个`<p>`标签的内容。
![conditional rendering v-if](img/b81014dd6939b1699e77e2dc0eef84b9.png)
## **2\\. `v-else`指令**
假设您要在显示为`true`时显示第一个`<p>`标签,并在显示结果为`false`时显示第二个`<p>`标签。 在这种情况下,我们可以使用`v-else`指令。 它类似于`else`块。
```html
<p v-if="display">Display evaluates to true</p>
<p v-else>You always get to see me :)</p>
```
`display`设为`true`时,将在`v-if`指令的条件求值为`true`的情况下呈现第一个`<p>`标签。
![v-else true](img/7d0940f1b5db61e3875cb2e2263d9f58.png)
`display`更改为`false`只会使用`v-else`伪指令呈现第二个`<p>`标签,如下所示,
![v-else false condition](img/0f65cbd6fe9e24b6e96377776a4ac52f.png)
**注意:** *具有`v-else`指令的 HTML 元素必须紧随具有`v-if`的元素。 否则,`v-else`元素将不会被识别。 换句话说,不要在`v-if`元素和`v-else`元素之间添加任何元素。*
可以在`<div>``<template>`等帮助下将这些指令添加到单个 HTML 元素或元素块中。考虑一种情况,您希望根据条件显示错误消息。 在这种情况下`if-else`块会派上用场。
## **3\. `v-else-if`指令**
它也与`v-if`元素一起使用。 该指令充当“`else-if`”条件。 与其他任何编程语言一样,它可以链接多次。
让我们向数据对象添加`val`属性,并为其提供数值。
```javascript
data: { message: "Hi", val: 5 }
```
`v-if``v-else-if``v-else`伪指令添加到三个`<p>`标签并添加条件。
```html
<p v-if="val < 10">Val is less than 10</p>
<p v-else-if="val > 10 && val < 20">val is between 10 and 20</p>
<p v-else>Pretty high val!!</p>
```
现在,让我们更改`val`属性的值,并查看输出如何变化。
首先,将`val`设为`5`。 由于它小于 10,因此`v-if`条件求值为`true`并被渲染。
![v-else-if first expression](img/cb9ed33f1627c5ef3a74aed8e5c6292f.png)
现在将`val`更改为`15``v-else-if`条件求值为`true`,并将其呈现到 DOM,如下所示。
![v-else-if second expression](img/29869b7f60d5b9f9d87511893e889e6b.png)
`val`更改为`90`会使`v-if``v-else-if`表达式均求值为`false`。 因此,将渲染`v-else`元素。
![v-else-if third condtion](img/ba1ad56b6d8ad18480db60329a7bb779.png)
**注意:** *与`v-else`相似,带有`v-else-if`指令的元素必须紧随带有`v-if`或`v-else-if`的元素。 否则,将无法识别。*
上面讨论的所有代码都可以在 [GitHub 仓库](https://github.com/JBTAdmin/vuejs)中找到。
是时候戴上开发人员的帽子,并尝试使用这些指令了! 祝你今天愉快。
......@@ -8,7 +8,7 @@
我们讨论了`v-if``v-else`等不仅可以应用于单个 HTML 元素,而且可以应用于使用`<div>``<template>`等的元素块。让我们首先来看一个带有`<template>`元素的示例 并了解它作为*不可见包装器*的行为,以最终结果呈现给 DOM。
## 使用<模板>元素
## 使用`<template>`元素
让我们在`<template>`元素内包装标题和段落,并使用`v-if`指令为其指定条件。 除此之外,我们还要添加没有任何条件的另一段。
......@@ -30,8 +30,90 @@ data: {
<p>How are you doing?</p>
```
如果由于`display`设置为`true`而看到了输出,则`if`条件评估`true`,并显示模板块中的元素。
如果由于`display`设置为`true`而看到了输出,则`if`条件求值`true`,并显示模板块中的元素。
![v-if template block](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20520%20532'%3E%3C/svg%3E)
![v-if template block](img/6e38ac6963bfa766ebb74bd9aa67b5ba.png)
<noscript><img alt="v-if template block" class="alignnone size-full wp-image-14093" height="532" src="img/6e38ac6963bfa766ebb74bd9aa67b5ba.png" width="520"/><p>这里有趣的是,如果您打开浏览器的<strong>开发人员工具</strong>(在 Chrome 浏览器中为<em> Ctrl + Shift + I </em><em> F12 </em>),然后在 在[元素]标签中,[<code>&lt;template&gt;</code>]元素将不包含[]。 它神奇地变成了<strong>不可见的</strong></p><p><img alt="developer tools" class="alignnone size-full wp-image-14094" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/10_p2-template-devTools.jpg" height="433" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20329%20433'%3E%3C/svg%3E" width="329"/></p><noscript><img alt="developer tools" class="alignnone size-full wp-image-14094" height="433" src="img/65cdd8584fd0a814f07052ca3cac578b.png" width="329"/><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"></span><span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"><span class="ezoic-ad ezoic-adl" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"></span></span><p><strong> <em>注意:</em> </strong> <em><code>v-if</code>条件的值为<code>false</code>时,整个元素将从 DOM 中分离/删除。 当在我们的应用中不需要某个元素时,这通常是首选的行为,因为 DOM 中包含较少的元素会提高其性能。 </em></p><h2><strong> v-show 指令</strong></h2><p>作为开发人员的生活是如此变幻莫测! 我们经常遇到需要频繁显示和隐藏元素的情况,即在网页上打开和关闭。 在这种情况下,最好使用<code>v-show</code>指令。</p><h3><strong>使用 v-show 的原因</strong></h3><p>该指令将确保 DOM 中始终存在<strong>元素。 将显示条件是否为真(评估为<code>true</code>)。 当条件评估为<code>false</code>时,该元素将通过自动添加 CSS 属性<code>display: none</code>来隐藏! 听起来不有趣吗?</strong></p><p>这个概念可能很难缠住我们的头脑。 不用担心 我已经覆盖了你。 示例和屏幕截图可为我们提供帮助!</p><p>在前面的示例中,让我们将<code>v-show</code>指令添加到第二段标签中。</p><pre><code class="language-html">&lt;p v-show="display"&gt;How are you doing?&lt;/p&gt;</code></pre><p><code>display</code><code>true</code>时,<code>v-if</code><code>v-show</code>的行为类似。 浏览器输出和开发人员工具显示的结果与以前相同(请参阅“使用&lt;模板&gt;元素”标题下的“<strong>”下显示的两个图像)。 这里没有惊喜!</strong></p><p>让我们将<code>display</code>属性的值更改为<code>false</code>。 我们完整的代码如下所示:</p><h4><em> Index.js </em></h4><pre><code class="language-javascript">var app = new Vue({ el: "#app", data: { display: false } });</code></pre><h4><em> Index.html </em></h4><pre><code class="language-html">&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Hello Vue!&lt;/title&gt; &lt;!-- including Vue with development version CDN --&gt; &lt;script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="app"&gt; &lt;template v-if="display"&gt; &lt;h1&gt;Welcome&lt;/h1&gt; &lt;p&gt;Hi there!&lt;/p&gt; &lt;/template&gt; &lt;p v-show="display"&gt;How are you doing?&lt;/p&gt; &lt;/div&gt; &lt;!-- including index.js file --&gt; &lt;script src="index.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt;</code></pre><p>顺便说一句,让我们继续查看浏览器的输出和开发人员工具的结果。</p><p><img alt="v-show hidden" class="alignnone size-full wp-image-14092" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/13_p2-v-show-invisible-1.jpg" height="501" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20652%20501'%3E%3C/svg%3E" width="652"/></p><noscript><img alt="v-show hidden" class="alignnone size-full wp-image-14092" height="501" src="img/af8367091b132c8d43446a93f6ede57b.png" width="652"/><p>不出所料,由于<code>v-if</code><code>v-show</code>条件都评估为<code>false</code>,因此没有任何内容呈现给网页。 这里也没有什么魔术。 但是,当我们打开开发人员工具并仔细查看“<strong> Elements </strong>”窗格时,有很多东西需要解码。</p><ol><li>具有<strong> v-if </strong>伪指令的<code>&lt;template&gt;</code>元素(包含<code>&lt;h1&gt;</code><code>&lt;p&gt;</code>元素)在评估为<code>false</code>时,已从 DOM 中删除了<strong></strong></li><li>仅具有<strong> v-show </strong>指令的第二个<code>&lt;p&gt;</code>元素<strong>使用 CSS <code>display</code>属性切换元素的可见性</strong>。 元素始终附加到 DOM,并且始终显示<strong>。 它只是变得不可见。 就这样!</strong></li></ol><h3><strong>当心! </strong></h3><p>由于不支持将<code>v-show</code><code>&lt;template&gt;</code>元素一起使用,因此无法使用。 另外,它不适用于<code>v-else</code><code>if</code><code>else</code>是灵魂伴侣,你知道吗?!不是,<code>show</code><code>else</code>!)</p><h3><strong>那么,我应该使用 v-if 或 v-show 吗? </strong></h3><p>好问题! 如果您想<strong>切换</strong>,通常将<strong>经常切换为</strong>,因为 DOM 中始终存在该元素,请使用<strong> v-show </strong>,无论初始条件是否为<code>true</code><code>false</code>。 借助 CSS <code>display</code>属性只能切换可见性。 因此,初始渲染成本较高。</p><p>如果<strong>的状态<strong>的状态不经常更改/切换</strong>,尤其是在运行时,请使用<strong> v-if </strong>。 因为在这里附加和分离元素通常会变得昂贵。 另外,请记住,<code>v-if</code><strong>懒惰的</strong>,即,如果条件在初次渲染时评估为<code>false</code>,则直到条件变为<code>true</code>时,元素或块才会被渲染。 第一次。</strong></p><p>还在头上有雾吗? 不用担心! 练习是这里的关键。 抓住巫师的帽子和魔杖,尝试一些咒语(示例场景),您将掌握它! 顺便说一下,以上讨论的所有代码都可以在<a href="https://github.com/JBTAdmin/vuejs"> GitHub 仓库</a>中找到。</p><p>祝您有美好的一天!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/9-rendering-lists-part-1/" title="9\. Rendering Lists Part 1 (Iterating over arrays)"> 9.渲染列表第 1 部分(遍历数组)</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
这里有趣的是,如果您打开浏览器的**开发人员工具**(在 Chrome 浏览器中为`Ctrl + Shift + I``F12`),然后在元素标签中,`<template>`元素将不包含。 它神奇地变成了**不可见的**
![developer tools](img/65cdd8584fd0a814f07052ca3cac578b.png)
**注意:** *当`v-if`条件的值为`false`时,整个元素将从 DOM 中分离/删除。 当在我们的应用中不需要某个元素时,这通常是首选的行为,因为 DOM 中包含较少的元素会提高其性能。*
## **`v-show`指令**
作为开发人员的生活是如此变幻莫测! 我们经常遇到需要频繁显示和隐藏元素的情况,即在网页上打开和关闭。 在这种情况下,最好使用`v-show`指令。
### **使用`v-show`的原因**
该指令将确保 DOM 中始终存在**元素**。 将显示条件是否为真(求值为`true`)。 当条件求值为`false`时,该元素将通过自动添加 CSS 属性`display: none`来隐藏! 听起来不有趣吗?
这个概念可能很难缠住我们的头脑。 不用担心 我已经覆盖了你。 示例和屏幕截图可为我们提供帮助!
在前面的示例中,让我们将`v-show`指令添加到第二段标签中。
```html
<p v-show="display">How are you doing?</p>
```
`display``true`时,`v-if``v-show`的行为类似。 浏览器输出和开发人员工具显示的结果与以前相同(请参阅“使用`template`元素”标题下显示的两个图像)。 这里没有惊喜!
让我们将`display`属性的值更改为`false`。 我们完整的代码如下所示:
#### *`Index.js`*
```javascript
var app = new Vue({
el: "#app",
data: {
display: false
}
});
```
#### *`Index.html`*
```html
<!DOCTYPE html>
<html>
<head>
<title>Hello Vue!</title>
<!-- including Vue with development version CDN -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<template v-if="display">
<h1>Welcome</h1>
<p>Hi there!</p>
</template>
<p v-show="display">How are you doing?</p>
</div>
<!-- including index.js file -->
<script src="index.js"></script>
</body>
</html>
```
顺便说一句,让我们继续查看浏览器的输出和开发人员工具的结果。
![v-show hidden](img/af8367091b132c8d43446a93f6ede57b.png)
不出所料,由于`v-if``v-show`条件都求值为`false`,因此没有任何内容呈现给网页。 这里也没有什么魔术。 但是,当我们打开开发人员工具并仔细查看“元素”窗格时,有很多东西需要解码。
1. 具有`v-if`伪指令的`<template>`元素(包含`<h1>``<p>`元素)在求值为`false`时,已从 DOM 中删除了。
2. 仅具有`v-show`指令的第二个`<p>`元素**使用 CSS `display`属性切换元素的可见性**。 元素始终附加到 DOM,并且始终显示。 它只是变得不可见。 就这样!
### **当心!**
由于不支持将`v-show``<template>`元素一起使用,因此无法使用。 另外,它不适用于`v-else``if``else`是灵魂伴侣,你知道吗?!不是,`show``else`!)
### **那么,我应该使用`v-if`或`v-show`吗?**
好问题! 如果您想**切换**,通常将**经常切换**,因为 DOM 中始终存在该元素,请使用`v-show`,无论初始条件是否为`true``false`。 借助 CSS `display`属性只能切换可见性。 因此,初始渲染成本较高。
如果**元素**的状态不经常更改/切换**,尤其是在运行时,请使用`v-if`。 因为在这里附加和分离元素通常会变得昂贵。 另外,请记住,`v-if`是**惰性的**,即,如果条件在初次渲染时求值为`false`,则直到条件变为`true`时,元素或块才会被渲染。
还在头上有雾吗? 不用担心! 练习是这里的关键。 抓住巫师的帽子和魔杖,尝试一些咒语(示例场景),您将掌握它! 顺便说一下,以上讨论的所有代码都可以在 [GitHub 仓库](https://github.com/JBTAdmin/vuejs)中找到。
祝您有美好的一天!
......@@ -37,6 +37,96 @@ data: {
在这里,为简单起见,我们在简单插值中使用变量`greeting`。 但它可以像其他任何属性一样使用,例如将其作为值传递给函数或将其绑定到链接的引用等。输出如下,
![v-for iterating over array](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20688%20448'%3E%3C/svg%3E)
![v-for iterating over array](img/af9854cb19e36518d9d7c5b0266dc44b.png)
<noscript><img alt="v-for iterating over array" class="alignnone size-full wp-image-14104" height="448" sizes="(max-width: 688px) 100vw, 688px" src="img/af9854cb19e36518d9d7c5b0266dc44b.png" srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/1_v-for-array.jpg 688w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/1_v-for-array-300x195.jpg 300w" width="688"/><p>使用小胡子语法的另一种方法是使用<code>v-text</code>指令。 它将<code>greeting</code>设置为文本内容。</p><pre><code class="language-html">&lt;ul&gt; &lt;li v-for="greeting in greetings" v-text=greeting&gt;&lt;/li&gt; &lt;/ul&gt;</code></pre><p>将呈现相同的结果。</p><h2><strong> Vue 是反应性的! </strong></h2><p><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"> </span> <span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"> <span class="ezoic-ad ezoic-adl" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"> </span> </span>让我们沿着存储通道走一下。 我们了解到 Vue 的美丽在于其<a href="https://javabeginnerstutorial.com/js/vue-js/2-template-syntax-reactivity/">反应性</a></p><p><strong> <em>快速回顾:</em> </strong>使状态和视图保持同步。 换句话说,Vue 不仅在引用的 DOM 中将<strong>呈现为</strong>数据,而且无论何时在数据对象中更改其值,<strong>都会更新</strong></p><p>让我们再来看一次这种情况。</p><p>使用快捷方式<strong> F12 </strong>打开<em> Chrome DevTools </em>,然后点击“<strong> Vue </strong>”。 仅当您已遵循我们的教程系列并安装了<a href="https://javabeginnerstutorial.com/vue-js/4-vue-devtools-setup/"> <strong> <em> Vue Devtools </em> </strong> Chrome 扩展</a>后,此面板才会出现。</p><p>由于我们没有使用任何全局变量来引用<code>index.js</code>文件中的 Vue 实例,因此默认情况下会将其保存到<code>$vm0</code>。 如下图所示,单击<code>&lt;Root&gt;</code>即可看到。 因此,让我们使用<code>$vm0</code>从开发者工具控制台访问 Vue 模型。</p><p><img alt="reactivity in vue" class="alignnone size-full wp-image-14105" data-lazy-sizes="(max-width: 372px) 100vw, 372px" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/2_vm0.jpg" data-lazy-srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/2_vm0.jpg 372w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/2_vm0-217x300.jpg 217w" height="514" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20372%20514'%3E%3C/svg%3E" width="372"/></p><noscript><img alt="reactivity in vue" class="alignnone size-full wp-image-14105" height="514" sizes="(max-width: 372px) 100vw, 372px" src="img/7de386b6e2a340c69e8afaf8d06fdc41.png" srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/2_vm0.jpg 372w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/2_vm0-217x300.jpg 217w" width="372"/><p>让我们转到控制台,使用<code>push</code>方法向<code>greetings</code>数组添加一个问候,然后查看视图是否进行了动态更新(<em>神奇地</em>!)。</p><pre><code class="language-javascript">$vm0.greetings.push("namaste")</code></pre><p><img alt="v-for reactivity" class="alignnone size-full wp-image-14106" data-lazy-sizes="(max-width: 509px) 100vw, 509px" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/3_reactivity.jpg" data-lazy-srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/3_reactivity.jpg 509w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/3_reactivity-300x242.jpg 300w" height="411" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20509%20411'%3E%3C/svg%3E" width="509"/></p><noscript><img alt="v-for reactivity" class="alignnone size-full wp-image-14106" height="411" sizes="(max-width: 509px) 100vw, 509px" src="img/fbdfc17ee75fab781a7335c339414c87.png" srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/3_reactivity.jpg 509w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/3_reactivity-300x242.jpg 300w" width="509"/><p>这不是魔术吗?</p><h2><strong>访问当前数组项的索引</strong></h2><p>开发者的生活没有暂停按钮! 我们期望完成意外的事情,例如访问数组项的索引及其内容。 我们知道如何使用 Vue 渲染数组元素,但是否也可以获得其索引? 好吧,答案是肯定的!</p><p>语法与我们之前看到的非常相似,</p><pre><code class="language-html">&lt;div v-for="(greeting, index) in greetings"&gt;{{ index }}. {{ greeting}}&lt;/div&gt;</code></pre><p>我们必须引入一个括号并指定两个用逗号分隔的参数,可以选择它们的名称。 <strong>第一个</strong>参数是指数组元素 – 在我们的例子中是<code>greeting</code><strong>第二个</strong>参数是可选的,它引用当前正在循环的项目的索引 – 在我们的示例中为<code>index</code>。 此<strong>订单</strong>是最重要的注意事项。 无论您使用什么名称,第一个始终是数组元素,第二个始终是 v-for 语法中的索引。 然后可以根据需要将其与代码中的这些名称一起使用。</p><p><img alt="v-for with index" class="alignnone size-full wp-image-14107" data-lazy-sizes="(max-width: 786px) 100vw, 786px" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/4_v-for-with-index.jpg" data-lazy-srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/4_v-for-with-index.jpg 786w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/4_v-for-with-index-300x161.jpg 300w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/4_v-for-with-index-768x413.jpg 768w" height="423" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20786%20423'%3E%3C/svg%3E" width="786"/></p><noscript><img alt="v-for with index" class="alignnone size-full wp-image-14107" height="423" sizes="(max-width: 786px) 100vw, 786px" src="img/e2131f026f63f0feaafc6fd692278f3c.png" srcset="https://javabeginnerstutorial.com/wp-content/uploads/2018/11/4_v-for-with-index.jpg 786w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/4_v-for-with-index-300x161.jpg 300w, https://javabeginnerstutorial.com/wp-content/uploads/2018/11/4_v-for-with-index-768x413.jpg 768w" width="786"/><p>让我们看一下最终代码。</p><h3>Index.html</h3><pre><code class="language-html">&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Hello Vue!&lt;/title&gt; &lt;!-- including Vue with development version CDN --&gt; &lt;script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="app"&gt; &lt;h2&gt;Greetings&lt;/h2&gt; &lt;!-- Iterating through array elements--&gt; &lt;ul&gt; &lt;li v-for="greeting in greetings" v-text=greeting&gt;&lt;/li&gt; &lt;/ul&gt; &lt;!-- Accessing array elements along with thier index --&gt; &lt;h2&gt;Greetings with Index&lt;/h2&gt; &lt;div v-for="(greeting, index) in greetings"&gt; {{ index }}. {{ greeting}} &lt;/div&gt; &lt;/div&gt; &lt;!-- including index.js file --&gt; &lt;script src="index.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt;</code></pre><h3>Index.js</h3><pre><code class="language-javascript">var app = new Vue({ el: "#app", data: { greetings: ["hi", "bonjour", "hola", "ciao"] } });</code></pre><p><a href="https://github.com/JBTAdmin/vuejs"> GitHub 仓库</a>中也提供了上面讨论的所有代码。 随意分叉仓库并进行一些实验。</p><p>在下一篇文章中,我们将研究如何使用 v-for 遍历对象。 在此之前,请继续练习!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/10-rendering-lists-part-2/" title="10\. Rendering Lists Part 2 (Iterating over objects)"> 10.渲染列表第 2 部分(遍历对象)</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
使用小胡子语法的另一种方法是使用`v-text`指令。 它将`greeting`设置为文本内容。
```html
<ul> <li v-for="greeting in greetings" v-text=greeting></li> </ul>
```
将呈现相同的结果。
## **Vue 是反应式的!**
让我们沿着存储通道走一下。 我们了解到 Vue 的美丽在于其[反应式](https://javabeginnerstutorial.com/js/vue-js/2-template-syntax-reactivity/)
**快速回顾**:使状态和视图保持同步。 换句话说,Vue 不仅在引用的 DOM 中将**呈现为**数据,而且无论何时在数据对象中更改其值,**都会更新**
让我们再来看一次这种情况。
使用快捷方式`F12`打开 *Chrome DevTools* ,然后点击“**Vue**”。 仅当您已遵循我们的教程系列并安装了 [**Vue Devtools** Chrome 扩展](https://javabeginnerstutorial.com/vue-js/4-vue-devtools-setup/) 后,此面板才会出现。
由于我们没有使用任何全局变量来引用`index.js`文件中的 Vue 实例,因此默认情况下会将其保存到`$vm0`。 如下图所示,单击`<Root>`即可看到。 因此,让我们使用`$vm0`从开发者工具控制台访问 Vue 模型。
![reactivity in vue](img/7de386b6e2a340c69e8afaf8d06fdc41.png)
让我们转到控制台,使用`push`方法向`greetings`数组添加一个问候,然后查看视图是否进行了动态更新(*神奇地*!)。
```javascript
$vm0.greetings.push("namaste")
```
![v-for reactivity](img/fbdfc17ee75fab781a7335c339414c87.png)
这不是魔术吗?
## **访问当前数组项的索引**
开发者的生活没有暂停按钮! 我们期望完成意外的事情,例如访问数组项的索引及其内容。 我们知道如何使用 Vue 渲染数组元素,但是否也可以获得其索引? 好吧,答案是肯定的!
语法与我们之前看到的非常相似,
```html
<div v-for="(greeting, index) in greetings">{{ index }}. {{ greeting}}</div>
```
我们必须引入一个括号并指定两个用逗号分隔的参数,可以选择它们的名称。 **第一个**参数是指数组元素 – 在我们的例子中是`greeting`**第二个**参数是可选的,它引用当前正在循环的项目的索引 – 在我们的示例中为`index`。 此**顺序**是最重要的注意事项。 无论您使用什么名称,第一个始终是数组元素,第二个始终是`v-for`语法中的索引。 然后可以根据需要将其与代码中的这些名称一起使用。
![v-for with index](img/e2131f026f63f0feaafc6fd692278f3c.png)
让我们看一下最终代码。
### `Index.html`
```html
<!DOCTYPE html>
<html>
<head>
<title>Hello Vue!</title>
<!-- including Vue with development version CDN -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h2>Greetings</h2>
<!-- Iterating through array elements-->
<ul>
<li v-for="greeting in greetings" v-text=greeting></li>
</ul>
<!-- Accessing array elements along with thier index -->
<h2>Greetings with Index</h2>
<div v-for="(greeting, index) in greetings">
{{ index }}. {{ greeting}}
</div>
</div>
<!-- including index.js file -->
<script src="index.js"></script>
</body>
</html>
```
### `Index.js`
```javascript
var app = new Vue({
el: "#app",
data: {
greetings: ["hi", "bonjour", "hola", "ciao"]
}
});
```
[GitHub 仓库](https://github.com/JBTAdmin/vuejs)中也提供了上面讨论的所有代码。 随意分叉仓库并进行一些实验。
在下一篇文章中,我们将研究如何使用`v-for`遍历对象。 在此之前,请继续练习!
......@@ -79,4 +79,4 @@ new Vue({
![v-model initial output](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20467%20384'%3E%3C/svg%3E)
<noscript><img alt="v-model initial output" class="alignnone size-full wp-image-14163" height="384" src="img/1fbc5015295fc979e5e228f95c136712.png" width="467"/><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"></span><span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"><span class="ezoic-ad ezoic-adl" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"></span></span><p>图像的右半部分显示<a href="https://javabeginnerstutorial.com/vue-js/4-vue-devtools-setup/"> Vue DevTools </a>窗格。 也可以看到具有<code>message</code>属性及其值的<code>data</code>对象。</p><p>当我们将文本字段中的消息从“hi”更改为“hello”时,我们键入的每个字符都将在基础数据模型(如 Vue Devtools 中所示)上进行反应性更新,并在输出结果的视图中进行更新 在<code>&lt;p&gt;</code>标签中使用小胡子语法。</p><p><img alt="reactivity with v-model" class="alignnone size-full wp-image-14164" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/12/2_reactivity-1.jpg" height="379" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20470%20379'%3E%3C/svg%3E" width="470"/></p><noscript><img alt="reactivity with v-model" class="alignnone size-full wp-image-14164" height="379" src="img/39c5c156976147d4e25ea3115a06f7e9.png" width="470"/><p>我强烈建议您如图所示打开 Vue Devtools 并更改文本字段中的值,以查看此更改是被动发生的。 这将是您的盛宴! 我可以保证。</p><h2>修饰符</h2><p>v 模型带有三个修饰符。 如果您错过了修饰符部分,请将检出<a href="https://javabeginnerstutorial.com/vue-js/11-listening-to-dom-events-and-event-modifiers/"></a></p><p><strong>用法:</strong>遵循<code>v-model</code>指令,添加一个点并指定修饰符。</p><li><code>.lazy</code> – 在更改事件(而非输入事件)之后将输入与数据同步</li><pre><code class="language-html">&lt;input v-model.lazy="message"&gt;</code></pre><li><code>.number</code> – 用于将有效的输入字符串转换为数字</li><pre><code class="language-html">&lt;input v-model.number="age"&gt;</code></pre><li><code>.trim</code> – 自动修剪用户输入</li><pre><code class="language-html">&lt;input v-model.trim="message"&gt;</code></pre><p>该代码一如既往在<a href="https://github.com/JBTAdmin/vuejs"> GitHub 仓库</a>中可用。</p><p>试一试,并注意 Vue 如何根据输入类型是否为文本字段,复选框,单选按钮,选择,多选,文本区域元素等来正确更新元素……它看起来和听起来很神奇,因为所有语法 您需要完成一个简单的指令<code>v-model</code>来完成这项艰巨的任务。 如果遇到任何问题,请随时在评论部分大声疾呼。</p><p>祝您有美好的一天!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/15-form-input-bindings/" title="15\. Form input bindings"> 15.表单输入绑定</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
<noscript><img alt="v-model initial output" class="alignnone size-full wp-image-14163" height="384" src="img/1fbc5015295fc979e5e228f95c136712.png" width="467"/><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"></span><span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"><span class="ezoic-ad ezoic-adl" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"></span></span><p>图像的右半部分显示<a href="https://javabeginnerstutorial.com/vue-js/4-vue-devtools-setup/"> Vue DevTools </a>窗格。 也可以看到具有<code>message</code>属性及其值的<code>data</code>对象。</p><p>当我们将文本字段中的消息从“hi”更改为“hello”时,我们键入的每个字符都将在基础数据模型(如 Vue Devtools 中所示)上进行反应式更新,并在输出结果的视图中进行更新 在<code>&lt;p&gt;</code>标签中使用小胡子语法。</p><p><img alt="reactivity with v-model" class="alignnone size-full wp-image-14164" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/12/2_reactivity-1.jpg" height="379" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20470%20379'%3E%3C/svg%3E" width="470"/></p><noscript><img alt="reactivity with v-model" class="alignnone size-full wp-image-14164" height="379" src="img/39c5c156976147d4e25ea3115a06f7e9.png" width="470"/><p>我强烈建议您如图所示打开 Vue Devtools 并更改文本字段中的值,以查看此更改是被动发生的。 这将是您的盛宴! 我可以保证。</p><h2>修饰符</h2><p>v 模型带有三个修饰符。 如果您错过了修饰符部分,请将检出<a href="https://javabeginnerstutorial.com/vue-js/11-listening-to-dom-events-and-event-modifiers/"></a></p><p><strong>用法:</strong>遵循<code>v-model</code>指令,添加一个点并指定修饰符。</p><li><code>.lazy</code> – 在更改事件(而非输入事件)之后将输入与数据同步</li><pre><code class="language-html">&lt;input v-model.lazy="message"&gt;</code></pre><li><code>.number</code> – 用于将有效的输入字符串转换为数字</li><pre><code class="language-html">&lt;input v-model.number="age"&gt;</code></pre><li><code>.trim</code> – 自动修剪用户输入</li><pre><code class="language-html">&lt;input v-model.trim="message"&gt;</code></pre><p>该代码一如既往在<a href="https://github.com/JBTAdmin/vuejs"> GitHub 仓库</a>中可用。</p><p>试一试,并注意 Vue 如何根据输入类型是否为文本字段,复选框,单选按钮,选择,多选,文本区域元素等来正确更新元素……它看起来和听起来很神奇,因为所有语法 您需要完成一个简单的指令<code>v-model</code>来完成这项艰巨的任务。 如果遇到任何问题,请随时在评论部分大声疾呼。</p><p>祝您有美好的一天!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/vue-js/15-form-input-bindings/" title="15\. Form input bindings"> 15.表单输入绑定</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
......@@ -53,11 +53,11 @@ FizzBuzz
上面显示的“FizzBu​​zz”示例是一个不错的脚本,它显示了通过分支我们可以在编码时做很多不同。
但是,以上示例涵盖了 Python 中 if-then-else 构造的相同程序流。 if 语句需要一个表达式,其值必须为 True 或 False。 如果表达式的计算结果为 True,则执行此语句后的代码块。 如果该语句的评估结果为 False,则跳过此块。
但是,以上示例涵盖了 Python 中 if-then-else 构造的相同程序流。 if 语句需要一个表达式,其值必须为 True 或 False。 如果表达式的计算结果为 True,则执行此语句后的代码块。 如果该语句的求值结果为 False,则跳过此块。
elif 语句再次要求一个评估结果为 True 或 False 的语句,并且仅在前一个语句被评估为 False 时才被评估。 否则,甚至不会评估该块。
elif 语句再次要求一个求值结果为 True 或 False 的语句,并且仅在前一个语句被求值为 False 时才被求值。 否则,甚至不会求值该块。
如果先前的 if 块和所有先前的 elif 块的求值为 False,则 else 块执行。 这里不需要任何语句进行评估。 如果所有以前的表达式求值为 False,则 else 块是默认情况。
如果先前的 if 块和所有先前的 elif 块的求值为 False,则 else 块执行。 这里不需要任何语句进行求值。 如果所有以前的表达式求值为 False,则 else 块是默认情况。
条件块的基本构造如下:
......@@ -76,7 +76,7 @@ else:
statement_block_3
```
而且,如果您有多个 if 语句,则将同时评估它们。 这意味着对于“FizzBu​​zz”示例,您不能使用简单的 if 块。 这是因为在这种情况下,每个 if 语句都会被求值,并且会导致您无法预期的结果。
而且,如果您有多个 if 语句,则将同时求值它们。 这意味着对于“FizzBu​​zz”示例,您不能使用简单的 if 块。 这是因为在这种情况下,每个 if 语句都会被求值,并且会导致您无法预期的结果。
```java
n = int(input("Enter a number: "))
......@@ -104,11 +104,11 @@ Fizz
## 生活不仅是对还是错
不幸的是有人说相反,因为布尔条件不仅是对还是错。 使用 Python 时,在每种情况下 0 的评估结果均为 False,其他所有数字均评估为 True。
不幸的是有人说相反,因为布尔条件不仅是对还是错。 使用 Python 时,在每种情况下 0 的求值结果均为 False,其他所有数字均求值为 True。
集合也是如此(当然也包括字符串)。 如果集合为空,则它在条件语句中评估为 False,在任何其他情况下为 True。
集合也是如此(当然也包括字符串)。 如果集合为空,则它在条件语句中求值为 False,在任何其他情况下为 True。
没有一个总是评估为 False。
没有一个总是求值为 False。
这就是为什么有人说很难用 Python 编写条件语句的原因。 但这始终取决于开发人员的口味。 “Python 禅宗”指出
......
......@@ -256,7 +256,7 @@ m
['eggs', 'sausage', 's', 'p', 'a', 'm']
```
如您所见,我们在 for 循环执行期间修改了列表,因此当循环结束并返回到头进行评估时,它在列表中找到了新元素,因此循环继续执行。
如您所见,我们在 for 循环执行期间修改了列表,因此当循环结束并返回到头进行求值时,它在列表中找到了新元素,因此循环继续执行。
为了避免这种情况,我们可以使用列表的副本在循环中进行迭代:
......
......@@ -123,7 +123,7 @@ def exchange(value, rate):
Nothing useful...
```
只使用没有任何值的 return 也是如此。 返回结果与没有返回语句的结果相同。 为什么要这么好? 例如,如果条件评估为 true,并且您想不返回任何内容,则希望终止函数。 自然地,您可以使用 return None,但是更多的 pythonic 解决方案将是简单地使用 return。
只使用没有任何值的 return 也是如此。 返回结果与没有返回语句的结果相同。 为什么要这么好? 例如,如果条件求值为 true,并且您想不返回任何内容,则希望终止函数。 自然地,您可以使用 return None,但是更多的 pythonic 解决方案将是简单地使用 return。
## 可选参数
......
......@@ -82,7 +82,7 @@ while True:
我必须同意。 单元测试(尽管我将在下一章中进行介绍)在这里会很麻烦。 解决方案是将这个较大的主循环拆分为较小的功能,这些功能可以单独进行测试。
例如,评估用户是赢还是输。 为此,我们可以编写一个函数,该函数将秘密数字,猜测,猜测计数和猜测数字作为输入,并对消息进行评估以告知用户。 但是一个函数的四个参数很多,因此现在让我们对其进行划分。 基于这些输入,我将创建一个函数来告诉用户秘密数字是猜中的数字是更高还是更低。
例如,求值用户是赢还是输。 为此,我们可以编写一个函数,该函数将秘密数字,猜测,猜测计数和猜测数字作为输入,并对消息进行求值以告知用户。 但是一个函数的四个参数很多,因此现在让我们对其进行划分。 基于这些输入,我将创建一个函数来告诉用户秘密数字是猜中的数字是更高还是更低。
```java
def user_won(guessed, secret):
......
......@@ -370,7 +370,7 @@ with open("Programming_Books_List.txt",'r') as file_obj:
1. 对大量数据执行重复性任务,其中原始数据“仅需要一次”
2. 在长数据序列上执行计算(可能适合或可能不适合内存-甚至可能是无限的!)
3. 生成数据序列,其中仅应在需要时才计算每个项目(惰性评估
3. 生成数据序列,其中仅应在需要时才计算每个项目(惰性求值
4. 对数据流中的多个项目执行一系列相同的操作(在管道中,类似于 Unix 管道)
在第一种情况下,如果数据本身不需要存储在内存中或再次引用,则生成器非常有效。 它们使程序员可以零碎地处理较小的数据块,并逐一产生结果。 程序绝对不需要保留先前迭代中的任何数据。
......
......@@ -14,7 +14,7 @@ Java `for`循环和增强的`for`循环是一种控制流语句,它提供了
`for`循环是 3 个表达式的组合,需要理解才能有效地使用`for`循环。
* *初始化*表达式初始化循环; 它会在循环开始时执行一次。
* *终止表达式*用于停止循环。 每次迭代都会对它进行评估,并且当*终止*表达式的评估结果为`false`时,循环终止。
* *终止表达式*用于停止循环。 每次迭代都会对它进行求值,并且当*终止*表达式的求值结果为`false`时,循环终止。
* 通过循环的每次迭代后,将调用*递增/递减*表达式。
### 循环的*语法*
......
......@@ -68,7 +68,7 @@ Java `HashMap`是基于哈希表的`Map`实现。 这就是为什么面试官总
在给定的`HashMap`中添加第 13 个元素后,超过给定`HashMap`的阈值限制,系统将创建一个新的后备键集数组(此数组的大小将是前一个数组的两倍)。 系统将不得不再次计算确切的存储桶,应放置上一个存储桶中的元素,并将旧`HashMap`中的所有元素复制到新的`HashMap`中。 整个过程称为重新哈希,因为会再次为每个元素计算`Hashcode`
因为超时的`HashMap`可能会被重新散布并且订单可能会发生变化。
因为超时的`HashMap`可能会被重新散布并且顺序可能会发生变化。
# `HashMap`的例子
......
......@@ -25,7 +25,7 @@
* 此类是 Java 集合框架的一部分。
* 此类实现`Set`接口。
* 它由哈希表支持。
* 它是无序的。 (随着时间的推移,订单不可预测)
* 它是无序的。 (随着时间的推移,顺序不可预测)
* 基本操作(如添加,删除,包含和大小)的恒定时间性能。
* 它不同步。
* `Iterator`方法返回的迭代器为快速失败。
......
......@@ -4,7 +4,7 @@
预期的 Java 9 版本引发了许多创新和令人印象深刻的新功能,Oracle 宣布了 JDK 的新发布议程,而这仅仅是开始。 过去,开发人员经常批评 Java 的发展速度不够快。
Java SE 9 于 2017 年 9 月发布。它包含一长串功能,包括模块化,读评估打印循环,提前编译以及用于字符串存储的节省内存的开发。
Java SE 9 于 2017 年 9 月发布。它包含一长串功能,包括模块化,读求值打印循环,提前编译以及用于字符串存储的节省内存的开发。
它将为 Java 语言的发展增加一个独特的阶段,并使 JDK 团队可以更快地进行修改和创新。 由于 Java 9 是 Java 10 继而的短期加速发布版本,因此 Java 9 已停止获取更新。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册