Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Angular2 + Electronでプレゼンテーションツールを作っている / Angular2-Electron-PresentationTool

joe_re
April 20, 2016

Angular2 + Electronでプレゼンテーションツールを作っている / Angular2-Electron-PresentationTool

ng-sake#2 LT資料

joe_re

April 20, 2016
Tweet

More Decks by joe_re

Other Decks in Technology

Transcript

  1. なんでapplication3 つもあるの?? presentation 機能は別window で開きたかった router で判断するのと迷ったけど、 このアプリケー ション 1

    つのwindow 上でのペー ジ遷移ないんだよなー だったらアプリケー ションごとに1 つのペー ジをrender する 構成にしちゃった方が状態管理楽じゃないかなー FluxUtils のContainer、Redux のContainer Components の イメー ジ
  2. Angular2's Component e x p o r t c l

    a s s E d i t o r { @ O u t p u t ( ' c h a n g e T e x t ' ) c h a n g e T e x t = n e w E v e n t E m i t t e r ( ) ; @ O u t p u t ( ' c h a n g e S e l e c t e d L i n e N o ' ) c h a n g e S e l e c t e d L i n e N o = n e w E v e n t E m i t t e r ( ) ; e d i t o r : A c e A j a x . E d i t o r ; n g O n C h a n g e s ( c h a n g e s : { t e x t : S i m p l e C h a n g e } ) { i f ( t h i s . e d i t o r & & t h i s . e d i t o r . g e t S e s s i o n ( ) . g e t V a l u e ( ) ! = = c h a n g e s . t e x t . c u r r e n t V a l u e ) { t h i s . e d i t o r . g e t S e s s i o n ( ) . s e t V a l u e ( c h a n g e s . t e x t . c u r r e n t V a l u e ) ; } } h a n d l e C h a n g e T e x t ( ) { t h i s . c h a n g e T e x t . e m i t ( t h i s . e d i t o r . g e t S e s s i o n ( ) . g e t V a l u e ( ) ) ; } h a n d l e C h a n g e L i n e N o ( ) { t h i s . c h a n g e S e l e c t e d L i n e N o . e m i t ( t h i s . e d i t o r . g e t S e l e c t i o n ( ) . g e t C u r s o r ( ) . r o w + 1 ) ; } } ※ 説明のために簡略化しています
  3. ngOnChanges を使わずに@input でsetter を使う e x p o r t

    c l a s s E d i t o r { @ O u t p u t ( ' c h a n g e T e x t ' ) c h a n g e T e x t = n e w E v e n t E m i t t e r ( ) ; @ O u t p u t ( ' c h a n g e S e l e c t e d L i n e N o ' ) c h a n g e S e l e c t e d L i n e N o = n e w E v e n t E m i t t e r ( ) ; @ i n p u t ( ) s e t t e x t ( t e x t : s t r i n g ) { i f ( t h i s . e d i t o r & & t h i s . e d i t o r . g e t S e s s i o n ( ) . g e t V a l u e ( ) ! = = t e x t ) { t h i s . e d i t o r . g e t S e s s i o n ( ) . s e t V a l u e ( t e x t ) ; } } / / . . . 以下略 }
  4. 親のロー カル変数にコンポー ネントを持って操る / / * * c h i

    l d * * / / @ C o m p o n e n t ( { s e l e c t o r : ' c o u n t d o w n - t i m e r ' , t e m p l a t e : ' < p > { { m e s s a g e } } < / p > ' } ) e x p o r t c l a s s C o u n t d o w n T i m e r C o m p o n e n t i m p l e m e n t s O n I n i t , O n D e s t r o y { / / . . . 省略 c l e a r T i m e r ( ) { c l e a r I n t e r v a l ( t h i s . i n t e r v a l I d ) ; } n g O n I n i t ( ) { t h i s . s t a r t ( ) ; } n g O n D e s t r o y ( ) { t h i s . c l e a r T i m e r ( ) ; } s t a r t ( ) { t h i s . _ c o u n t D o w n ( ) ; } s t o p ( ) { t h i s . c l e a r T i m e r ( ) ; } p r i v a t e _ c o u n t D o w n ( ) { / / . . . 省略 } } / / * * p a r e n t * * / / @ C o m p o n e n t ( { s e l e c t o r : ' c o u n t d o w n - p a r e n t - l v ' , t e m p l a t e : ` < h 3 > C o u n t d o w n t o L i f t o f f ( v i a l o c a l v a r i a b l e ) < / h 3 > < b u t t o n ( c l i c k ) = " t i m e r . s t a r t ( ) " > S t a r t < / b u t t o n > < b u t t o n ( c l i c k ) = " t i m e r . s t o p ( ) " > S t o p < / b u t t o n > < d i v c l a s s = " s e c o n d s " > { { t i m e r . s e c o n d s } } < / d i v > < c o u n t d o w n - t i m e r # t i m e r > < / c o u n t d o w n - t i m e r > ` , d i r e c t i v e s : [ C o u n t d o w n T i m e r C o m p o n e n t ] } ) e x p o r t c l a s s C o u n t d o w n L o c a l V a r P a r e n t C o m p o n e n t { }
  5. 子を @ViewChild 経由で呼び出す @ C o m p o n

    e n t ( { s e l e c t o r : ' c o u n t d o w n - p a r e n t - v c ' , t e m p l a t e : ` < h 3 > C o u n t d o w n t o L i f t o f f ( v i a V i e w C h i l d ) < / h 3 > < b u t t o n ( c l i c k ) = " s t a r t ( ) " > S t a r t < / b u t t o n > < b u t t o n ( c l i c k ) = " s t o p ( ) " > S t o p < / b u t t o n > < d i v c l a s s = " s e c o n d s " > { { s e c o n d s ( ) } } < / d i v > < c o u n t d o w n - t i m e r > < / c o u n t d o w n - t i m e r > ` , d i r e c t i v e s : [ C o u n t d o w n T i m e r C o m p o n e n t ] } ) e x p o r t c l a s s C o u n t d o w n V i e w C h i l d P a r e n t C o m p o n e n t i m p l e m e n t s A f t e r V i e w I n i t { @ V i e w C h i l d ( C o u n t d o w n T i m e r C o m p o n e n t ) p r i v a t e _ t i m e r C o m p o n e n t : C o u n t d o w n T i m e r C o m p o n e n t ; s e c o n d s ( ) { r e t u r n 0 ; } n g A f t e r V i e w I n i t ( ) { s e t T i m e o u t ( ( ) = > t h i s . s e c o n d s = ( ) = > t h i s . _ t i m e r C o m p o n e n t . s e c o n d s , 0 ) } s t a r t ( ) { t h i s . _ t i m e r C o m p o n e n t . s t a r t ( ) ; } s t o p ( ) { t h i s . _ t i m e r C o m p o n e n t . s t o p ( ) ; } }
  6. Service 経由でダイレクトに相互通信する c l a s s M i s

    s i o n S e r v i c e { p r i v a t e _ m i s s i o n A n n o u n c e d S o u r c e = n e w S u b j e c t < s t r i n g > ( ) ; p r i v a t e _ m i s s i o n C o n f i r m e d S o u r c e = n e w S u b j e c t < s t r i n g > ( ) ; m i s s i o n A n n o u n c e d $ = t h i s . _ m i s s i o n A n n o u n c e d S o u r c e . a s O b s e r v a b l e ( ) ; m i s s i o n C o n f i r m e d $ = t h i s . _ m i s s i o n C o n f i r m e d S o u r c e . a s O b s e r v a b l e ( ) ; a n n o u n c e M i s s i o n ( m i s s i o n : s t r i n g ) { t h i s . _ m i s s i o n A n n o u n c e d S o u r c e . n e x t ( m i s s i o n ) ; } c o n f i r m M i s s i o n ( a s t r o n a u t : s t r i n g ) { t h i s . _ m i s s i o n C o n f i r m e d S o u r c e . n e x t ( a s t r o n a u t ) ; } } c l a s s M i s s i o n C o n t r o l C o m p o n e n t { c o n s t r u c t o r ( p r i v a t e m i s s i o n S e r v i c e : M i s s i o n S e r v i c e ) { m i s s i o n S e r v i c e . m i s s i o n C o n f i r m e d $ . s u b s c r i b e ( / / s o m e p r o c e s s . . . ) } a n n o u n c e ( ) { t h i s . m i s s i o n S e r v i c e . a n n o u n c e M i s s i o n ( ' n e x t m i s s i o n ' ) ; } } c l a s s A s t r o n a u t C o m p o n e n t i m p l e m e n t s O n D e s t r o y { s u b s c r i p t i o n : S u b s c r i p t i o n ; c o n s t r u c t o r ( p r i v a t e m i s s i o n S e r v i c e : M i s s i o n S e r v i c e ) { m i s s i o n S e r v i c e . m i s s i o n A n n o u n c e d $ . s u b s c r i b e ( / / s o m e p r o c e s s . . . ) } c o n f i r m ( ) { t h i s . m i s s i o n S e r v i c e . c o n f i r m M i s s i o n ( t h i s . a s t r o n a u t ) ; } }