Я узнавал немного о Vue каждый день и постепенно усваивал его. сделать несколько заметок
диаграмма жизненного цикла:https://nicen.cn/collect/life.png
Vue-Routerизучать:https://nicen.cn/vue-router.html
расширять
Vue CliПодробное объяснение:https://blog.csdn.net/six_six_six_666/article/details/82633731
используется дляДинамические компоненты且на основе Ограничения шаблонов в DOMприйти на работу。Это расширение Ограничения HTML-тегов, динамическое указание компонентов.
Когда тег определен в компонентах,При вызове компонентов,компонентысередина этикеткииз Содержимое заменит тег。<AB>я вставляюизсодержание</AB>。слотизсодержание是существовать父级进行рендерингиз。vm.
Если необходимо несколько слотов, вы можете воспользоваться <slot>
элементизспециальныйизхарактеристика:name
для определения именованных слотов.
Предоставляя контент в именованный слот, мы можем сделать это в <template>
Используется на элементах v-slot инструкции и с v-slot Параметры предоставляют свои имена в форме:
v-slot (сокращенно #) можно добавить только в шаблон (#slotName). Розетка без имени будет иметь неявное имя «по умолчанию». Есть только одно исключение. Когда компонент имеет только один слот по умолчанию, v-slot можно записать непосредственно в компоненте.
<main>
<slot>中间可以定义默认содержание</slot>
</main>
/*Эксклюзивный слот по умолчанию*/
<current-user v-slot:default="slotProps">
{{ slotProps.user.firstName }}
</current-user>
<slot>可以существовать标签между定义默认содержание。когдаиспользоватькомпоненты未添加слотсодержание时,Будет отображен контент по умолчанию.
Слот области действия: некоторые переменные могут быть динамически привязаны к слоту в компоненте. Затем, когда родительский компонент передает содержимое слота, содержимое слота может вызывать эти переменные, привязанные к слоту в дочернем компоненте.
намекать
Функция слота области видимости состоит в том, чтобы позволить переданному содержимому слота вызывать состояние подкомпонента.
В инструкцию можно добавить динамические параметры, такие как имя атрибута привязки v-bind, имя события v-on и имя слота v-slot ([произвольное выражение JS]);
v-mydirective:[argument]="value"
<base-layout>
<template v-slot:[dynamicSlotName]>
...
</template>
</base-layout>
argument
Параметры можно обновлять на основе данных экземпляра компонента! Это позволяет гибко использовать пользовательские директивы в приложениях.
Vue.directive('pin', {
bind: function (el, binding, vnode) {
el.style.position = 'fixed'
var s = (binding.arg == 'left' ? 'left' : 'top')
el.style[s] = binding.value + 'px'
}
})
Вы можете использовать оба в компоненте scoped Кадзуи scoped стиль по желанию; scoped Селектор в стиле может идти «глубже», например, влиять на дочерние компоненты, вы можете использовать >>> Оператор
<style scoped>
.a >>> .b { /* ... */ }
</style>
модификаториз Подробное объяснение:https://www.jianshu.com/p/6b062af8cf01
Модификатор .sync существует как синтаксический сахар времени компиляции. Он будет расширен до прослушивателя v-on, который автоматически обновляет свойства родительского компонента.
<comp :foo.sync="bar"></comp>
/* расширятьдля */
<comp :foo="bar" @update:foo="val => bar = val"></comp>
/* когдаребеноккомпоненты需要更新 foo из значения необходимо явно вызвать событие обновления */
this.$emit('update:foo', newValue)
Для элементов и атрибутов, изначально определенных в массивах и объектах в данных, поддерживается реагирование. Однако для новых атрибутов или элементов (модификаций, отличных от конкретных переопределенных методов объекта массива), для добавления ответов необходимо использовать интерфейс set. (Глубокое наблюдение).
Замена целых объектов или массивов также останется отзывчивой.
Реакция массива и реактивный принцип:
https://cn.vuejs.org/v2/guide/list.html#%E5%8F%98%E6%9B%B4%E6%96%B9%E6%B3%95 https://cn.vuejs.org/v2/guide/reactivity.html
При использовании ключа он меняет порядок элементов на основе изменений ключа и удаляет элементы, где ключ не существует. Также может использоваться для принудительной замены элемента/компонента вместо его повторного использования. Если ключ не используется, Vue будет обновлять только существующий DOM, повторно используя существующий DOM в максимальной степени. При использовании с v-for ключ необходимо привязать с помощью привязки, в противном случае значение ключа будет просто строкой.
Vue создает виртуальный DOM, чтобы отслеживать, как он меняет реальный DOM.
return createElement('h1', this.blogTitle)
createElement
到底会返回什么呢?На самом деле нетэтоДействительный DOM элемент. Более точное название могло бы быть createNodeDescription
,因для它所包含изинформация покажет Vue Какие узлы необходимо отображать на странице, включая информацию описания ее подузлов. Мы описываем такие узлы как «виртуальные узлы». (virtual node)”,也常简写它для“VNode”。“виртуальный DOM» — это наша ссылка на Vue Все дерево компонентов построено VNode Название дерева.
Методом создания VNode является createElement, например createElement (tag, {}, []) или createElement (tag, {}, string), где tag — это имя тега созданного элемента, «{}» — атрибут. созданного элемента, «[ ]» — это список дочерних элементов созданного элемента, а строка — это текст.
官方документ:https://cn.vuejs.org/v2/guide/render-function.html
Шаблон (шаблон) Vue фактически компилируется в функцию рендеринга (рендер), а рендер и шаблон не существуют одновременно. Шаблон будет подвергнут рендерингу, затем будет получен Vnode, а затем обновлен на странице.
В функции Render в Vue есть параметр. Этот параметр обычно называется h. Фактически, этот h называется createElement. Функция Render помещает возвращаемое значение createElement в HTML. В функции createElement есть 3 параметра.
/* @return {VNode} */
createElement(
/* {String | Object | Function} */
/* Строка тега HTML, объект параметра или функция, тип возвращаемого значения которой — String/Object. Этот параметр является обязательным */
'div',
/* {Object} */
/* Объект данных, содержащий атрибуты, связанные с шаблоном, чтобы мы могли добавить эти атрибуты в шаблон. Этот параметр не является обязательным. */
{
attrs: {
name: headingId,
href: '#'+headingId
},
style: {
color: 'red',
fontSize: '20px'
},
'class': {
foo: true,
bar: false
},
/* Свойства DOM */
domProps: {
innerHTML: 'baz'
},
/* компонентыprops */
props: {
myProp: 'bar'
},
/* Прослушивание событий основано на 'on' */
/* Поэтому он больше не поддерживается как 'v-on:keyup.enter' модификатор */
/* Необходимо сопоставить вручную KeyCode */
on: {
click: function(event) {
event.preventDefault();
console.log(111);
}
}
}
/* {String | Array} */
/* Дочерние узлы (VNodes) состоят из createElement() построен. Дополнительные параметры */
/* или Простой изиспользовать строку для генерации из «текстовый узел». */
[
'xxxx',
createElement('h1', «заголовок»)
createElement(MyComponent, {
props: {
someProp: 'xxx'
}
}),
/*Получаем контент в слот по умолчанию*/
this.$slots.default
]
)
Разница между двумя
Практическое применение:
render: function (createElement) {
// `<div><slot></slot></div>`
return createElement('div', this.$slots.default)
}
Используется для регистрации пользовательской директивы.
Миксины предоставляют очень гибкий способ распределения повторно используемых функций в компонентах Vue. Миксин может содержать произвольные параметры компонента. Когда компонент использует примесь, все параметры примеси будут «смешаны» с опциями самого компонента.
Загрязнение策略Подробное объяснение:https://cn.vuejs.org/v2/guide/mixins.html
keep-alive При упаковке динамических компонентов экземпляры неактивных компонентов кэшируются, а не уничтожаются. и transition сходство, является абстрактным компонентом: он не отображает DOM элемент не появится в цепочке родительских компонентов компонента. Соответствующие компоненты можно установить с помощью реквизита.
Когда компонент <keep-alive>
переключается внутри, его activated
и deactivated
Эти две функции перехвата жизненного цикла будут выполняться соответствующим образом.
<!-- Динамические компоненты Зависит от vm Примеры `componentId` property контроль -->
<component :is="componentId"></component>
<!-- Вы также можете зарегистрировать рендерингизкомпонентыили prop входящие изкомпоненты -->
<component :is="$options.components.child"></component>
component,рендеринг одного «компонента Юань" является динамическим компонентом,Решить, какие компоненты является рендерингом.
Vue позволяет вам определить ваш компонент как фабричную функцию, которая будет анализировать определение вашего компонента асинхронно. Vue будет запускать фабричную функцию только тогда, когда компонент необходимо отрисовать, и кэшировать результаты для будущего повторного рендеринга. (При рендеринге это эквивалентно его игнорированию, и обычные компоненты будут анализироваться напрямую).
Пучок webpack 2 и ES2015 Синтаксис складывается, и мы можем использовать динамический импорт следующим образом:
Vue.component(
'async-webpack-example',
// Этот динамический импорт вернет `Promise` объект.
() => import('./my-async-component')
)
Подробное описание:https://blog.csdn.net/Liu_Jun_Tao/article/details/81913946
У каждой функции есть прототип (явный объект-прототип), и сама функция также является объектом с атрибутом __proto__.
Каждый объект имеет атрибут __proto__ (прототип, указывающий на конструктор, неявный объект-прототип).
Объект-прототип также имеет атрибут, называемый конструктором. Этот атрибут содержит указатель, указывающий на исходный конструктор.
материал
vue componentсоздаватьключевые ссылки:https://blog.csdn.net/uciaqgjj/article/details/104915699
vueасинхронныйкомпонентыпринцип:https://blog.csdn.net/uciaqgjj/article/details/104923335
Обработка границ:https://cn.vuejs.org/v2/guide/components-edge-cases.html
app.component('my-component', {
props: {
// Базовая проверка типов (`null` и `undefined` Значения пройдут любую проверку типа)
propA: Number,
// Несколько возможных типов
propB: [String, Number],
// Обязательно из строки
propC: {
type: String,
required: true
},
// Со значением по умолчанию из числа
propD: {
type: Number,
default: 100
},
// Объект со значением по умолчанию из
propE: {
type: Object,
// Значение Object илиArrayizDefault должно быть возвращено из фабричной функции.
default() {
return { message: 'hello' }
}
},
// Пользовательская функция проверки
propF: {
validator(value) {
// Это значение должно соответствовать одной из следующих строк:
return ['success', 'warning', 'danger'].includes(value)
}
},
// Функция со значением по умолчанию из
propG: {
type: Function,
// В отличие от значения объекта или массива по умолчанию, это не заводская функция — это используется как значение по умолчанию из функции.
default() {
return 'Default function'
}
}
}
})
Если вы хотите передать все свойства объекта в качестве реквизита, вы можете использовать v-bind без параметров (используйте v-bind вместо :prop-name).
<blog-post v-bind="post"></blog-post>
//эквивалентно
<blog-post v-bind:id="post.id" v-bind:title="post.title"></blog-post>
methods
。/* начинатьшаблонрендеринг */
this.$nextTick(function() {
/* Сделать добавленный ввод автоматически получать фокус */
this.$refs.addInput.focus();
})
$nextTick
。Шина: компонент связывает событие, другой компонент запускает событие и передает данные через событие.
Vue2.x может использовать внедрение и предоставлять интерфейсы для замены глобальной шины событий.
Vue 2 где шина событий передается в существующем Vue Создайте новый в экземпляре приложения. Vue Экземпляр, поведение, инициируемое событием, реализуется через этот экземпляр. Более широкая коммуникация по состоянию компонента Но очевидно из использования видно, что это решение является относительно громоздким. Vue 3 В версии,ребенок孙компонентымеждуиз Статусная связь имеет новыйизплан:Provide / Inject
предпосылка:
/*создаватьvm*/
new Vue({
el:'#app',
render: h => h(App),
beforeCreate() {
Vue.prototype.$bus = this /*Установить глобальную шину событий*/
},
})
Глобальная шина событий подходит для ситуаций передачи данных, отличных от родительско-дочернего и дочернего-отцовского. Вы можете использовать экземпляр Vue как свойство объекта-прототипа Vue в событии beforeCreate Vue, чтобы удовлетворить всем вышеуказанным условиям. Все компоненты могут получить доступ к объекту шины, используя this.$bus.
Следует проявлять осторожность, чтобы избежать конфликтов имен событий при их использовании. Прежде чем компонент будет уничтожен, события, привязанные к шине, должны быть отключены.
watch API изflush
варианты могли бы быть лучшеконтрольперезвонитьизвремя。它可以设置для 'pre'
、'post'
или 'sync'
。
官方документ:https://v3.cn.vuejs.org/api/instance-methods.html#watch
изменение (не замена) Если объект представляет собой массив, старое значение будет таким же, как новое значение, поскольку они относятся к одному и тому же объекту/массиву. Вю Копия значения до изменения не сохраняется. Для значений, отличных от базовых типов, все назначения являются ссылками, поэтому все будет одинаково.
user.user = res.data.data;
/* res.data.data = news = olds = user.user */
/* Они ссылаются на оба исходных объекта */
watch(user.user,function (news,olds) {
}
provide() {
return {
foo: this.foo,
bar: this.bar
}
}