You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: src/guide/built-ins/teleport.md
+4-4
Original file line number
Diff line number
Diff line change
@@ -6,9 +6,9 @@
6
6
7
7
## استفاده پایه {#basic-usage}
8
8
9
-
گاهی اوقات ممکن است به این وضعیت برخورد کنیم که یک بخش از تمپلیت یک کامپوننت از نظر منطقی به آن تعلق دارد، اما از نظر ظاهری باید در مکان دیگری در DOM نمایش داده شود، خارج از ساختار DOM برنامه.
9
+
گاهی اوقات ممکن است به این وضعیت برخورد کنیم که یک بخش از تمپلیت یک کامپوننت از نظر منطقی به آن تعلق دارد، اما از نظر ظاهری باید در مکان دیگری در DOM نمایش داده شود، حتی خارج از ساختار DOM برنامه.
10
10
11
-
یکی از مثالهای رایج این وضعیت زمانی است که یک مدال تمام صفحه ای ایجاد میکنیم. بهتر است دکمه مدال و خود مدال در داخل همان کامپوننت قرار داشته باشند، زیرا هر دو به وضعیت باز/بسته بودن مدال مرتبط هستند. اما این به این معناست که مدال به همراه دکمه در سلسله مراتب DOM برنامه نمایش داده میشود و در نتیجه ممکن است موقعیت دهی مدال با استفاده از CSS مشکلساز شود.
11
+
یکی از مثالهای رایج این وضعیت زمانی است که یک مُدال تمام صفحه ای ایجاد میکنیم. بهتر است کد دکمه مدال و خود مدال در داخل همان کامپوننت قرار داشته باشند، زیرا هر دو به وضعیت باز/بسته بودن مدال مرتبط هستند. اما این به این معناست که مدال به همراه دکمه در سلسله مراتب DOM برنامه نمایش داده میشود و در نتیجه ممکن است موقعیت دهی مدال با استفاده از CSS مشکلساز شود.
12
12
13
13
ساختار HTML زیر را در نظر بگیرید.
14
14
@@ -169,11 +169,11 @@ const open = ref(false)
169
169
</Teleport>
170
170
```
171
171
172
-
که وضعیت `isMobile`میتواند با تشخیص تغییرات در media query به صورت پویا بهروزرسانی شود.
172
+
سپس میتوانیم به صورت پویا `isMobile` را به روز کنیم.
173
173
174
174
## چندین تلپورت بر روی یک هدف {#multiple-teleports-on-the-same-target}
175
175
176
-
یک مورد رایج میتواند شامل کامپوننت `<Modal>` باشد که امکان فعال شدن همزمان چندین نمونه را فراهم میکند. در این نوع سناریو، چندین کامپوننت `<Teleport>` میتوانند محتوای خود را به همان عنصر هدف منتقل کنند. ترتیب اضافه کردن المانها، به ترتیب انتقالدهی خواهد بود، به این معنا که المانهای بعدی پس از المانهای انتقالی اولیه در داخل عنصر هدف قرار میگیرند.
176
+
یک مورد رایج میتواند شامل کامپوننت `<Modal>` باشد که امکان فعال شدن همزمان چندین نمونه را فراهم میکند. در این نوع سناریو، چندین کامپوننت `<Teleport>` میتوانند محتوای خود را به همان عنصر هدف منتقل کنند. ترتیب اضافه کردن المانها، به ترتیب انتقالدهی خواهد بود، به این معنا که المانهای بعدی پس از المانهای انتقالی اولیه در داخل عنصر هدف قرار میگیرند، اما همه در داخل همان عنصر هدف خواهند بود.
Copy file name to clipboardexpand all lines: src/guide/components/registration.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -138,4 +138,4 @@ export default {
138
138
139
139
این روش پیشنهادی هنگام استفاده از SFCها و یا string templateها میباشد. اما همانطور که در [محدودیتهای تجزیه تمپلیت در DOM](/guide/essentials/component-basics#in-dom-template-parsing-caveats) صبحت شد، تگهای PascalCase در in-DOM templates قابل استفاده نیستند.
140
140
141
-
خوشبختانه Vue از تبدیل تگهای kebab-case به کامپوننتهای ثبتشده با PascalCase پشتیبانی میکند. این به این معناست که کامپوننت ثبت شده `MyComponents` میتواند در تمپلیت هم به شکل `<MyComponent>` و هم به شکل `<my-component>` رفرنس داده شود. این قابلیت به ما اجازه میدهد تا همان ثبت کردن کامپوننت در جاوااسکریپت را بدون در نظر گرفتن نحوه نوشتن آن در تمپلیت استفاده کنیم.
141
+
خوشبختانه Vue از تبدیل تگهای kebab-case به کامپوننتهای ثبتشده با PascalCase پشتیبانی میکند. این به این معناست که کامپوننت ثبت شده `MyComponents` میتواند در تمپلیت Vue (یا داخل یک عنصر HTML ارائه شده توسط Vue) هم به شکل `<MyComponent>` و هم به شکل `<my-component>` رفرنس داده شود. این قابلیت به ما اجازه میدهد تا همان ثبت کردن کامپوننت در جاوااسکریپت را بدون در نظر گرفتن نحوه نوشتن آن در تمپلیت استفاده کنیم.
Copy file name to clipboardexpand all lines: src/guide/components/slots.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -303,7 +303,7 @@ function BaseLayout(slots) {
303
303
میتوانید از پراپرتی [$slots](/api/component-instance.html#slots) در ترکیب با [v-if](/guide/essentials/conditional.html#v-if) برای رسیدن به این هدف استفاده کنید.
304
304
305
305
در مثال زیر یک کامپوننت کارت را با سه اسلات شرطی تعریف میکنیم: `header` و `footer` و یک `default`.
306
-
زمانی که header / footer / default حضور داشته باشد، میخواهیم آنها را با یک المنت جدا بپیچیم تا استایل اضافی اعمال شود:
306
+
زمانی که محتوا برای header / footer / default حضور داشته باشد، میخواهیم آنها را با یک المنت جدا بپیچیم تا استایل اضافی اعمال شود:
Copy file name to clipboardexpand all lines: src/guide/essentials/conditional.md
+3-3
Original file line number
Diff line number
Diff line change
@@ -110,8 +110,8 @@ const awesome = ref(true)
110
110
111
111
## `v-if` با `v-for` {#v-if-with-v-for}
112
112
113
+
وقتی که `v-if` و `v-for` هر دو روی یک عنصر استفاده شوند، ابتدا `v-if` ارزیابی میشود. برای جزئیات بیشتر، به [رندر لیست](list#v-for-with-v-if) مراجعه کنید.
114
+
113
115
::: warning توجه داشته باشید
114
-
استفاده از `v-if` و `v-for` روی یک عنصر به دلیل اولویت ضمنی، **توصیه نمیشود**. برای جزئیات به [style guide](/style-guide/rules-essential#avoid-v-if-with-v-for) مراجعه کنید.
116
+
استفاده از `v-if` و `v-for` روی یک عنصر به دلیل اولویت ضمنی، **توصیه نمیشود**. برای جزئیات به [رندر لیست](list#v-for-with-v-if) مراجعه کنید.
115
117
:::
116
-
117
-
زمانی که `v-if` و `v-for` هر دو روی یک عنصر استفاده میشوند، ابتدا `v-if` ارزیابی میشود. برای جزئیات به [list rendering guide](list#v-for-with-v-if) مراجعه کنید.
Copy file name to clipboardexpand all lines: src/guide/essentials/list.md
+11-5
Original file line number
Diff line number
Diff line change
@@ -223,10 +223,6 @@ data() {
223
223
224
224
## `v-if` با `v-for` {#v-for-with-v-if}
225
225
226
-
::: warning توجه داشته باشید
227
-
استفاده از `v-if` و `v-for` روی یک عنصر به دلیل اولویت ضمنی، **توصیه نمیشود**. برای جزئیات به [style guide](/style-guide/rules-essential#avoid-v-if-with-v-for) مراجعه کنید.
228
-
:::
229
-
230
226
وقتی هر دو روی یک نود وجود داشته باشند، `v-if` اولویت بالاتری نسبت به `v-for` دارد. این بدان معناست که شرط `v-if` دسترسی به متغیرهای درون اِسکوپ `v-for` نخواهد داشت:
231
227
232
228
```vue-html
@@ -249,6 +245,16 @@ data() {
249
245
</template>
250
246
```
251
247
248
+
:::warning هشدار
249
+
استفاده از `v-if` و `v-for` روی یک عنصر به دلیل اولویت ضمنی **توصیه نمیشود**.
250
+
251
+
دو مورد رایج وجود دارد که ممکن است وسوسه شوید این کار را انجام دهید:
252
+
253
+
-**فیلتر کردن آیتمها در یک لیست** (مانند `v-for="user in users" v-if="user.isActive"`). در این موارد، `users` را با یک پراپرتی computed جدید جایگزین کنید که لیست فیلترشده شما را برمیگرداند (مثلاً `activeUsers`).
254
+
255
+
-**اجتناب از رندر یک لیست در صورتی که نباید نمایش داده شود** (مانند `v-for="user in users" v-if="shouldShowUsers"`). در این موارد، `v-if` را به یک عنصر کانتینر بالاتر منتقل کنید (مانند `ul` یا `ol`).
256
+
:::
257
+
252
258
## حفظ وضعیت با `key` {#maintaining-state-with-key}
253
259
254
260
وقتی Vue لیستی از المانهای رندرشده با `v-for` را بهروزرسانی میکند، به طور پیشفرض از استراتژی پچ در محل (in-place patch) استفاده میکند. اگر ترتیب آیتمهای داده تغییر کرده باشد، به جای جابجایی المانهای DOM برای مطابقت با ترتیب آیتمها، Vue هر المان را د رجای قبلی خود اصلاح میکند و مطمئن میشود که محتوای رندرشده در آن اندیس خاص درست است.
@@ -275,7 +281,7 @@ data() {
275
281
`key` اینجا یک خاصیت ویژهای است که با `v-bind` پیاده سازی شده است. نباید آن را با متغیر کلیدی key هنگام [استفاده از v-for با یک آبجکت](#v-for-with-an-object) اشتباه بگیرید.
276
282
:::
277
283
278
-
[توصیه میشود](/style-guide/rules-essential#use-keyed-v-for) هر جا امکان دارد یک خاصیت `key` با `v-for` ارائه دهید، مگر اینکه محتوای DOM تکرارشونده ساده باشد (هیچ اجزاء یا المانهای DOM حاوی state نباشد) یا عمداً برای افزایش عملکرد به رفتار پیش فرض تکیه می کنید. (مترجم: همه جا از `key` استفاده کنید چون از آینده خبر ندارید و نمیدونید چه بلایی قراره سر کدی که شما نوشتید بیاد 😃)
284
+
توصیه میشود هر جا امکان دارد یک خاصیت `key` با `v-for` ارائه دهید، مگر اینکه محتوای DOM تکرارشونده ساده باشد (هیچ کامپوننت یا المانهای DOM حاوی state نباشد) یا عمداً برای افزایش عملکرد به رفتار پیش فرض تکیه می کنید. (مترجم: همه جا از `key` استفاده کنید چون از آینده خبر ندارید و نمیدونید چه بلایی قراره سر کدی که شما نوشتید بیاد 😃)
279
285
280
286
خاصیت `key` مقادیر اولیه - یعنی رشتهها و اعداد - را انتظار دارد. از آبجکتها به عنوان کلید `v-for` استفاده نکنید. برای استفاده جزئی از خاصیت `key` لطفا به [مستندات API key](/api/built-in-special-attributes#key) مراجعه کنید. (مترجم: از `index` درون `v-for` به عنوان `key` استفاده نکنید)
Copy file name to clipboardexpand all lines: src/guide/essentials/template-refs.md
+2
Original file line number
Diff line number
Diff line change
@@ -314,6 +314,8 @@ defineExpose({
314
314
315
315
هنگامی که والد نمونهای از این کامپوننت را از طریق ارجاع تمپلیت میگیرد، نمونه بازیابی شده به شکل `{ a: number, b: number }` خواهد بود (refها همانند نمونههای معمولی به صورت خودکار unwrap میشوند)
316
316
317
+
توجه داشته باشید که `defineExpose` باید قبل از هر عملیات `await` فراخوانی شود. در غیر این صورت، ویژگیها و متدهایی که پس از عملیات `await` مشخص میشوند، قابل دسترسی نخواهند بود.
318
+
317
319
همچنین ببینید: [Typing Component Template Refs](/guide/typescript/composition-api#typing-component-template-refs) <supclass="vt-badge ts" />
0 commit comments