Vue.js | הגדרת משתנה גלובלי
-
@liy770
https://vuejs.org/api/application.html#app-config-globalpropertiesapp.config.globalProperties.msg = 'hello'
זה מיועד לשמירת ערך קבוע שיהיה זמין בכל הדפים.
אם אתה רוצה ערך שיהיה ניתן להגדרה ושינוי בכל מקום תשתמש בקובץ חיצוני עם ref עיין כאן או עם vuex / pinia -
@liy770 זה כבר לא קשור ל-VUE אלא ל-JS.
יש הבדל ב-JS בין קריאה של שדה לכתיבה לתוך שדה.
בקריאה, אם השדה לא קיימת אז JS בודק את שרשרת הפרוטוטייפים, ומחזיר את הערך משם אם זה קיים שם.לעומת זאת, בכתיבה לשדה, זה תמיד יהיה על האובייקט עצמו ולא על הפרוטוטייפ.
(נראה לי שההסבר פשוט, כי JS לא מבחין בין פעולת יצירת השדה לבין פעולת הכתיבה לשדה, שניהם נעשים על ידי השמה לתוך השדה, ואם השדה לא קיימת זה מיוצר אוטומטית, לכן אין דרך לדעת שהתכוונת לפרוטוטייפ ולא לאובייקט עצמו)
יש שתי פתרונות לצורך שלך:
אני מתייחס ל"צורך" בצורה צרה מאוד, כלומר רק לצורך המוצהר של "ערך גלובלי שאני אוכל לגשת אליו מכל קובץ vue בפרוייקט הזה באמצעות
this.$value
". יש דרכים יותר טובות לניהול state גלובליא) תוכל לכתוב לשדה על ידי
this.constructor.prototype.$value
ב) להגדיר ש-$value
הוא מסוג אובייקט ותמיד תיגש לשדה בתוכו, כך תקבל תמיד גם בכתיבה וגם בקריאה את אותה שדה.Vue.prototype.$values = { value };
-
@liy770 התכוונתי שתעשה ככה:
בקובץ הראשי:Vue.prototype.$values = { xyz: "xyz" };
בגישה לערך מקובץ אחר:
this.$values.xyz
כתיבה לערך:
this.$values.xyz = "abc"
זה היה לפי מה שהחלטת שאתה רוצה לגשת אליו ככה,
הייתי ממליץ במקום זה לשים את הערך בקובץ נפרד, משהו כזה:xyz.js
let xyz = "xyz" export function setXyz(val) { xyz = val } export function getXyz() { return xyz }
והשימוש:
import { getXyz, setXyz } from './xyz' let xyz = getXyz setXyz(xyz + "123")
אם אתה רוצה שהערך יהיה ריאקטיבי (כלומר שהאפליקציה תגיב לשינויים בערך) צריך להשתמש בשירותים של vue לעשות אותו ריאקטיבי, אני לא כל כך מכיר
-
@ב-ל אמר בVue.js | הגדרת משתנה גלובלי:
@liy770 אמר בVue.js | הגדרת משתנה גלובלי:
@yossiz תודה אבל משום מה אני מקבל ערך ריק...
אם אתה בvue 3 זה לא יעבוד לך
וראה מה שכתבתי לעיל
vue2