Vue+Type ScriptカスタムComponent
3129 ワード
前述の文章では,Vue+Type Scriptを用いて簡単なToDo Demoを実現した.実はこのDemoではカスタム
これは一般的にアプリケーションのルートコンポーネントとして使用されます.以下では、Vueのコンポーネントシステムと単一ファイルコンポーネントについてより具体的に説明します.取付 という規則宣言が追加されています.は、 に設定する.取付 は、TSが 単一ファイルモジュール
注意
完全なコードは、
Component
が使われています.次のようになります.@Component
class App extends Vue{ }
これは一般的にアプリケーションのルートコンポーネントとして使用されます.以下では、Vueのコンポーネントシステムと単一ファイルコンポーネントについてより具体的に説明します.
vue-loader
$npm install -D vue-loader
webpack.config.js
のmodule.rules
には、{ test: /\.vue$/, loader: 'vue-loader' }
vue-property-decorator
、$npm i -S vue-property-decorator
を取り付ける、tsconfig
のemitDecoratorMetadata
オプションをtrue
vue-template-compiler
,$npm i -D vue-template-compiler
vue-shims.d.ts
接尾辞の単一ファイルモジュールを識別するために、.vue
宣言ファイルを作成する.内容は以下の通り:declare module "*.vue" {
import Vue from "vue";
export default Vue;
}
Todo
クラスをmodels.ts
ファイルに単独で配置する.export default class Todo{
content: string
created: Date
done = false
constructor(content:string){
this.content = content
this.created = new Date()
}
}
TodoItem.vue
を作成し、内容は以下の通りである:
✓
☐
{{todo.content}}
import Vue from "vue"
import Component from "vue-class-component"
import { Prop } from "vue-property-decorator"
import Todo from "./Todo"
@Component
export default class TodoItem extends Vue {
@Prop() todo:Todo
markDone():void{
this.todo.done = true
}
markTodo():void{
this.todo.done = false
}
}
注意
script
ラベルにlang="ts"
プロパティを追加する必要があります.app.ts
を次のように変更します:import Vue from "vue"
import Component from "vue-class-component"
import TodoItem from "./TodoItem.vue"
import Todo from "./Todo"
@Component
class App extends Vue{
newTodoText = ''
todos :Array = [new Todo(" Vue")]
hideCompletedTodos = false
visitCount = 0
error:any = null
create():void{
const content = this.newTodoText.trim()
if(content.length < 1){
this.error = " "
return
}
const todo = new Todo(content)
this.todos.push(todo)
this.newTodoText = ""
}
clearError():void{
this.error = null
}
}
const app = new App({ el: '#app',
components: {
'todo-item': TodoItem
}
})
index.html
のul
のラベルをバインドし、次のように変更します.
完全なコードは、
https://github.com/banxi1988/VueToDoDemo.git
ラベルstep7
を参照してください.