在 Vue.js 中,以 $
開頭的屬性通常是框架內部提供的特殊屬性或方法,用於訪問 Vue 例項的一些內部屬性或執行特定的操作。以下是一些常見的以 $
開頭的屬性:
屬性:
1.$data:Vue 例項的資料物件,包含例項中定義的資料。
const app = new Vue({ data: { message: 'Hello, Vue!' } }); console.log(app.$data.message); // 輸出:Hello, Vue!
2.$props:包含了父元件傳遞給子元件的屬性。
Vue.component('my-component', { props: ['message'], mounted() { console.log(this.$props.message); // 輸出:Hello, Vue! } });
3.$el:Vue 例項關聯的根 DOM 元素。
const app = new Vue({ el: '#app' }); console.log(app.$el); // 輸出:#app 元素的 DOM 引用
4.$options:用於當前 Vue 例項的初始化選項。
const app = new Vue({ data: { message: 'Hello, Vue!' }, created() { console.log(this.$options.data().message); // 輸出:Hello, Vue! } });
5.$refs:包含了元件中所有擁有 ref
特性的 DOM 元素或子元件例項。
const app = new Vue({ data: { message: 'Hello, Vue!' }, created() { console.log(this.$options.data().message); // 輸出:Hello, Vue! } });
6.$emit():在子元件中觸發父元件的事件。
<div id="app"> <my-component @custom-event="handleCustomEvent"></my-component> </div> <script> Vue.component('my-component', { methods: { handleClick() { this.$emit('custom-event', 'Hello from child component!'); } } }); const app = new Vue({ methods: { handleCustomEvent(data) { console.log(data); // 輸出:Hello from child component! } } }); </script>
7.$on():監聽當前例項上的自定義事件。
const app = new Vue({ created() { this.$on('custom-event', data => { console.log(data); // 輸出:Hello from child component! }); } });
8.$nextTick():在下次 DOM 更新迴圈結束之後執行延遲迴調。
const app = new Vue({ data: { message: 'Hello, Vue!' }, methods: { updateMessage() { this.message = 'Updated message'; this.$nextTick(() => { console.log(this.$el.textContent); // 輸出:Updated message }); } } });
9.$watch():用於觀察 Vue 例項上的資料變化。
const app = new Vue({ data: { message: 'Hello, Vue!' }, watch: { message(newMessage, oldMessage) { console.log(`Old message: ${oldMessage}, New message: ${newMessage}`); } } });
10.$router:Vue Router 例項,用於在 Vue 應用中進行路由導航。
const router = new VueRouter({ routes: [ { path: '/', component: Home }, { path: '/about', component: About } ] }); const app = new Vue({ router, methods: { goToAboutPage() { this.$router.push('/about'); // 導航到 /about 頁面 } } });
11.$attrs:用於訪問父元件傳遞給子元件但子元件沒有顯式宣告接收的非 prop 特性(attribute)集合。
<div id="app"> <my-component title="Custom Title"></my-component> </div> <script> Vue.component('my-component', { mounted() { console.log(this.$attrs.title); // 輸出:Custom Title } }); const app = new Vue(); </script>
方法
1.$set(object, key, value):在 Vue 例項或元件例項中設定響應式屬性的方法。
const vm = new Vue({ data: { obj: {} } }); vm.$set(vm.obj, 'newKey', 'newValue');
2.$delete(object, key):在 Vue 例項或元件例項中刪除屬性的方法。
const vm = new Vue({ data: { obj: { key: 'value' } } }); vm.$delete(vm.obj, 'key');
3.$forceUpdate():強制當前 Vue 例項重新渲染。
const vm = new Vue({ data: { message: 'Hello' }, methods: { updateMessage() { this.message = 'Updated'; this.$forceUpdate(); } } });
4.$createElement():用於建立虛擬 DOM 元素的方法,通常在渲染函式中使用。
const MyComponent = { render(createElement) { return createElement('div', 'Hello, Vue!'); } };
5.$destroy():銷燬當前 Vue 例項。
const vm = new Vue({ el: '#app' }); vm.$destroy();
6.$refs:引用子元件或 DOM 元素的特殊屬性。
html <div id="app"> <my-component ref="myRef"></my-component> </div> <script> const app = new Vue({ mounted() { console.log(this.$refs.myRef); // 輸出:子元件的例項或 DOM 元素的引用 } }); </script>
7.$slots:訪問插槽內容的屬性,用於處理父元件傳遞的內容。
<my-component> <span slot="header">Header</span> <span slot="footer">Footer</span> </my-component>
8.$scopedSlots:訪問具名插槽內容的屬性,用於處理父元件傳遞的具名插槽內容。
<my-component> <template v-slot:default="slotProps"> <span>{{ slotProps.text }}</span> </template> </my-component>