플러그인은 뷰에 전역 레벨의 기능을 추가한다.=> 여러 컴포넌트에서 사용되는 기능을 만들 때 사용한다.
여러 종류의 플러그인이 존재한다.
awesome-vue에서 뷰의 플러그인들을 확인할 수 있다.
Vue.use()
global method인 Vue.use()
메소드를 호출하여 플러그인을 추가할 수 있다.
이는 new Vue()
를 호출하여 앱을 시작하기 전에 실행되어야 한다.
옵션을 넣을 수도 있다.
// calls `MyPlugin.install(Vue)`
Vue.use(MyPlugin, { someOption: true })
new Vue({
//... options
})
Vue.use
가 자동으로 같은 플러그인을 여러번 추가하는 것을 막아준다. 따라서 같은 플러그인을 여러번 Vue.use에 등록하여도, 플러그인이 한 번만 설치되게 한다.
어떠한 플러그인으 vue-router
와 같이 자동으로 Vue.use()를 호출하는 Vue.js 공식 플러그인들이 있다. 그러나, CommonJS와 같은 모듈 환경에서는 항상 Vue.use()
를 호출해주어야 한다.
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
뷰 플러그인은 install
메소드가 반드시 있어야 한다.
이 메서드는 Vue constructor를 첫 번째 인자로 받고, 다른 option들도 받아서 추가된다.
MyPlugin.install = function (Vue, options) {
// 1. 전역 메서드와 프로퍼티 추가하기
Vue.myGlobalMethod = function () {
// some logic ...
}
// 2. add a global asset
Vue.directive('my-directive', {
bind (el, binding, vnode, oldVnode) {
// some logic ...
}
...
})
// 3. inject some component options
Vue.mixin({
created: function () {
// some logic ...
}
...
})
// 4. 인스턴스 메소드 추가하기
Vue.prototype.$myMethod = function (methodOptions) {
// some logic ...
}
}
install 메서드 안에 인스턴스 메서드를 정의하였다.
const MyPlugin = {
install(Vue){
Vue.prototype.$_convertToUpper = function(str){
return str.toUpperCase();
}
}
}
Vue.use(MyPlugin);
new Vue({
el: "#app",
data: {
todos: [
{ text: "Learn JavaScript", done: false },
{ text: "Learn Vue", done: false },
{ text: "Play around in JSFiddle", done: true },
{ text: "Build something aweåome", done: true }
]
},
methods: {
toggle: function(todo){
todo.done = !todo.done
}
}
})
<del v-if="todo.done">
{{ $_convertToUpper(todo.text) }}
</del>
<span v-else>
{{ $_convertToUpper(todo.text) }}
</span>
vue.js에서 공통적인 텍스트 포맷팅에 사용되는 필터를 정의할 수 있도록 해준다.
필터는 두 곳에서 사용할 수 있다.
{{}}
)v-bind
expression필터는 pipe
로 js expression 끝에 추가될 수 있다.
<!-- in mustaches -->
{{ message | capitalize }}
<!-- in v-bind -->
<div v-bind:id="rawId | formatId"></div>
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
뷰 인스턴스를 만들기 전에 전역 필터를 정의할 수도 있다. 전역 필터와 로컬 필터가 같은 이름이라면, 로컬 필터가 적용된다.
Vue.filter('capitalize', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
new Vue({
// ...
})
필터는 체이닝될 수 있다.
다음과 같은 예는 filterB(filterA(message)) 로 적용된다.
{{ message | filterA | filterB }}
{{ message | filterA('arg1', 'b')}}
filterA는 세 개의 인자를 받는 함수이다. 첫 번째 인자로 message, 그다음 인자로 'arg1', 'b'가 들어가게 된다.
const comp1 = {
data(){
return{
message : "hello this is yejin",
name: "yejin"
}
},
template : `
<div>
{{message | capitalize}}
<br>
{{name | iSaid('one', 'two')}}
</div>`,
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
},
iSaid(value, arg1, arg2){
return `${value} said : ${arg1}, ${arg2}`;
},
}
}
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing