各角度「アプリケーション」NG-アプリは注射器を持って、作成するための責任があり、キャッシュは{KEY1:ヌル、KEY2:値2としてKEY1、心の依存オブジェクトに依存していない場合、依存関係を探して 、...}、 以降際にキー1 {:VALUE1、KEY2:キー1値2イベントは、KEY1は、依存関係オブジェクト変更 、...}を、 すべてのファイルがロードされた後に、すべてのファイルがロードされた場合は、グローバルコンフィギュレーション機能は、KEY1は表示されませんでした実行する設定を実行し、それがエラーになります、グローバルコンフィギュレーション機能を実行しません。
まず、タイトル要素の設計思想:
1、参考クロッシングタグ
(1)タイトルのコンテンツ
2は、テンプレートは、
(1)<IMGは-ngのSRC = "{{ './ title.png'}}">
(2)<スパン> {{}}タイトル</スパン>
図3に示すように、コントローラ(空)、リンク(空)。
第二に、ローカルローディングアセンブリの設計のアイデア:
1、参照タグクロッシング
(1)画像の名前
(2)回転しています
( 3)が存在するかどうか
2、鋳型
(1)<SRC = "{{ '+ ./'+名'。PNG「}}" IMG-ngの>
3、コントローラ(空)、そこにリンク
、回転場合(1)を用いてele.addClassは(「」)、({})ele.cssであってもよい
、ローディングアセンブリの全体的なデザインコンセプト第3:
1、転送パラメータタグ属性(なし)
2、テンプレートは、
(1)ルートタグは、によって要求された(表示されています割り当ての結果)マスク画像とマスクの下で、クラス()
ラベル(2)サブラベル、A、部分ローディングアセンブリは、タグ名を横断参照ピクチャは、回転クラスは、Bは、テキストプロンプトがある
3、制御装置(空)、リンク(空の)
設計アイデア4つのグローバルプロンプトアセンブリヒントとグローバルサービス:
1、通過するタグの属性パラメータ(NO)
2、鋳型
(1)ルートタグ、(画像マスクとマスクの下)、クラス
(2)サブラベルは、アレイを介して、結合テキストプロンプト
3、コントローラ
(1)は、グローバルアラートサービス受信
4、グローバルアラートサービス
(1)は、空の配列とヒントオブジェクト定義
(2)関数は、プロンプト機能内部パラメータプロンプトコンテンツオブジェクトにコンテンツを要求設定定義され、プロンプトオブジェクト放電を空の配列は、単一のタイマー(反復、プロンプトオブジェクト削除アレイ)を行うに
5つの設計アイデアアセンブリ切り替え
基準タグクロッシング、1
(1)パラメータデータであるが、別のスイッチによって制御され、この制御スイッチで定義されたパラメータ
(2)パラメータ2は、このスイッチの制御を含むパラメータも背景コールバック関数への要求を送信している可能性があり、セクションデータである
、2テンプレートを
、(1)画像ファイル名、画像名、パラメータ2の制御を変更することができプロパティの位相スイッチ 以下のような関連、「{{ './'+コンフィグ[data.value] +' PNG「}}」NG-SRC =
(2)関数が実行をクリックし
、図3に示すように、コントローラは、
(1)画像の名前、$スコープを配置しました。 = {0設定:「スイッチOFF」}
(2)で定義された関数をクリックし、あるscope.data.value = 0 $
4と、クリック機能が定義されている場合、考慮すべき要因に依存する。
(1)他のスイッチによって制御されます。
(2)パラメータ設定要求結果に応じてスイッチを制御するために、バックグラウンドに要求を送信するかどうか、
(3)パラメータ割り付けに制御スイッチ
6、複雑な論理ページ
1、ページ組成物
(1)パラメータを使用してこのページにジャンプします
( 2)フィルタ条件
(3)無線ページを記録する、すべてがすべてのページを選択を選択
(4)を含む相互作用及びポップタブ
(5)タブ
(6)データの要求を、ローカルおよびグローバル旋回円運動がある
(7あなたが更新すると)、リフレッシュが成功または失敗促さ
2、ページのロジック
は、このページの初期化の構成を除いルートは、ページング・サービスで(1)
(2)上のサービス、ページング・サービス、両方の組み合わせを選択しますサービスは、このページの注射、着信のサービスで、このページの方法の範囲およびパブリックプロパティとメソッドを設定するには、このページを実行します。
(3)ページは通常のレンダリングに初期化されると、その後のパラメータがあるかどうかに基づいて決定します、フィルタ条件、デフォルト値のフィルタ条件を展開する二レンダリングするかどうかをするかどうか。
(4)本ページングページングコンポーネントに関連付けられたページがページング方法コンポーネント定義要求機能によってパラメータを渡す属性に属性、機能はまた、本ページとページングサービスで起動することができます。
LET消え旋回、要求イベントが二回、2つの要求の結果が返されたときに、(5)サービス要求に、現れたり消えたり旋回しましょう。
関連するコード次の3
(関数(){ 角度 .module( 'ポリシーModule1の') .controller( 'policyWhiteOrderCtrl'、関数($範囲、tradeApi、$ stateParams、clickCheckbox){ $ scope.currentPageDatas新しい新しいclickCheckbox.init =( 'whiteListId')。 scope.broadcastToPagination = {$ filter_optionである:{}、/ *ページフィルタ条件* / start_filter:関数(コールバック){ this.reload() } / *フィルタ機能、ユーティリティ* / URL: 'seclity / wlist / GETINFO'、 ページ: 'page_total'、/ *統一のパラメータの名前* / TOTALPAGE:統一されたパラメータの'page_total'、/ *名* / 合計: 'datas_total'、/ *統一のパラメータの名前* / コールバック:関数(RES){/ *ページング要求実行後、*コールバックを呼び出します/ スコープの$ [ 'リスト'] = res.wlists; $スコープ[ 'toPaginationDatas'] [」、CUST '] = [{/ *以下は、レーン内* /タブ入手でき、ページ内に配置することができます TXT:'有効' データ:res.deployed_total、 単位:'ストリップ、 ' }]; $ scope.currentPageDatas.page($範囲['一覧「]、res.datas_total); } }; $ scope.init =関数(タイプ){ request_param = {VAR 法: 'POST'、 ルート'seclity'、 URL: '/ wlist / GETINFO'、 paramsは:{ PAGENUM :. 1 }、 スコープ。{ 範囲:$スコープ、 initload_key: 'initload」 }、 荷重:$ scope.broadcastToPagination.load(3) }; IF(タイプ=== 'リロード')request_param.loadを削除し、 tradeApi .query(request_param) .then(関数(RES){ $ = res.wlists scope.list ; $ scope.toPaginationDatas =は{/ *少しのデータ* /があり 、CUST:[{/ *レーンで* /タブ入手でき、ページ内に配置することができ、次の TXT '有効'、 データ:RES。 deployed_total、 単位: 'アイテム、' }]、 / *タブの中に注入しなければならない以下の、タブが中* /で取得することができる ページ:res.page_current、 TOTALPAGE:res.page_total、 全res.datas_total }。 $のscope.pre_params_fun(); }); tradeApiの .query({ メソッド: 'get'が、 ルート'seclity'、 URL: '/ wlist / GET_PROTOCOL' }) .then(関数(RES){ $ scope.select_option.protocol = []; angular.forEach(RES .protos、関数(アイテム){ $のscope.select_option.protocol.push({ V:アイテム、 K:アイテム }) }) })。 }。 $ scope.pre_params_fun =関数(){ VARターゲット= $ stateParams.target。 (ターゲット=== null)の復帰であれば、 $ scope.broadcastToPagination.filter_option_toggle($ scope.broadcastToPagination.reload)。 $ scope.broadcastToPagination.filter_option.protocolType =ターゲット。 $ scope.broadcastToPagination.start_filter($ scope.currentPageDatas.init) }。 }); })();
/ *以下是:分页组件里的请求函数* / $ scope.query =関数(page_index、タイプ){ tradeApi .query({ メソッド:$ scope.emitToCurrentPageDatas.query_method、 ルート:$ scope.emitToCurrentPageDatas.query_root、 URL: $ scope.emitToCurrentPageDatas.query_url、 データ:$ scope.set_query_params(page_index)、 paramsは:$ scope.set_query_params(page_index)、 荷重:{ 表:関数(boolen){ $ scope.emitToCurrentPageDatas.tableload = boolen; } } }) .then(関数(RES){ $ scope.fromCurrentPageDatas.page = RES [$ scope.emitToCurrentPageDatas.page]。 $ scope.fromCurrentPageDatas.totalPage = RES [$ scope.emitToCurrentPageDatas.totalPage]。 $ scope.all_pages_add(); $ scope.fromCurrentPageDatas.total = RES [$ scope.emitToCurrentPageDatas.total]。 (タイプ=== 'リロード'){もし dir_tip.set({ : '!成功刷新' MSG }) } $ scope.emitToCurrentPageDatas.callback(RES); }) }。 $ scope.emitToCurrentPageDatas.reload =関数(){ $のscope.query() }。
七、ポップな要素とデザインのアイデアは、サービスをポップ:
注:すべてのポップアップ、フレームは同じです各NG-ショーの値がfalseに設定されているため、一部のコンテンツは表示されません。
図1において、符号
(1)HTML
<DIV ID = "DIR-警告"> <DIV CLASS = "DIR-アラートモデル" NG-IF = "alert.isShowModel" NGクリック= "clickMask()"> </ div> <divのクラス= "DIR -alertラップ」NG-ショー= "alert.isShowModel" NGスタイル= "alert.width"> <DIV CLASS = "DIR-アラートタイトル"> <スパンNG-バインド= "> </" alert.titleスパン> <EM = "clickClose()" NG-ショー= "alert.isShowIconを" NGクリック> </ em>の </ div> <divのクラス= "DIR-アラートコンテンツ"> <divのNGバインド=」 alert.tipText "> </ div> <divのID =" DIR-アラートのhtml "> </ div> </ DIV> <DIV CLASS = "DIR-アラートボタン" NG-ショー= "alert.isShowFooter"> <入力NG-バインド= "alert.cancelText"スタイル= "余白-右:15%" NGクリック=」 alert.clickCancel()」 NG-隠す= "alert.isCancelTextShow"タイプ= "ボタン"クラス= "BTN BTN-概要プライマリ" /> <入力NGクリック= "alert.clickConfirm()" NG-隠す= "alert.isShowConfirmText"タイプ= "ボタン" クラス= "BTN BTN-アウトライン危険DIR-アラートOK"値= "{{alert.confirmText}}" /> </ div> </ div> </ div>
(2)JS
angular.module( 'コモンDIR') .directive( 'dirAlert'、関数(){ リターン{ 制限: 'E'、 templateUrl: 'モジュール/共通指令/ DIR-alert.html'、 範囲:{}、 コントローラ:関数($スコープ、dir_alert){ $ scope.alert = dir_alert; $ scope.clickMask =関数(){ IF($ scope.alert.isShowMask){ $ scope.alert.isShowModel = FALSE; } }; $の範囲.clickClose =関数(){ $ scope.alert.isShowModel = FALSE; } }、 リンク:機能(範囲、ELE){ } }。 })
(3)サービス
angular.module( '共通-DIR') .factory( 'dir_alert'、関数($のSCEは、$コンパイル、$ rootScope){ リターン{ isShowModel:偽、 幅:{幅: '300ピクセル'}、 タイトル:「系统消息」、 isShowIcon:真、 tipText: ''、 confirmText '确定'、 cancelText '取消'、 isShowConfirmText:偽、 isShowMask:真、 isShowFooter:偽、 isCancelTextShow:偽、 clickCancel:関数(){ this.isShowModel = FALSE ; }、 tipHtml: ''、 tipHtmlAllMehtods:{}、 alertSet:関数(parameterObject){ この= VAR。 parameterObject.isShowModel =はtrue。 that.tipText = ''; angular.element(のdocument.getElementById( '#DIR-アラートtipHtml'))、空(); that.tipHtml = parameterObject.tipHtml || 偽; that.tipHtmlAllMehtods = parameterObject.tipHtmlAllMehtods || ''; (that.tipHtml && that.tipHtmlAllMehtodsが){場合 。that.tipHtmlScope = $ rootScope新しいです$()。 angular.extend(that.tipHtmlScope、that.tipHtmlAllMehtods)。 。。angular.element(のdocument.getElementById( '#dirを-アラートtipHtml'))、空()((that.tipHtmlScope)$(angular.element(that.tipHtml)をコンパイル))追加。 } parameterObject.clickConfirm =関数(){ angular.isFunction(clickConfirmCallback)?clickConfirmCallback():angular.noop(); that.isShowModel = falseは、 }。 parameterObject.clickCancel =関数(){ angular.isFunction(clickCancelCallback)?clickCancelCallback():angular.noop(); that.isShowModel = falseは、 }。 angular.isObject(parameterObject)?angular.extend(つまり、parameterObject): ''; } }。 });
(4)アプリケーション
$ scope.detail_alert =関数(単一){ dir_alert .alertSet({ 幅:{幅: '1000px'}、 tipTitle:single.protocolType + '协议分析详情'、 tipHtml: 「<テーブルクラス= "テーブルのテーブルボーダーテーブル共通のcust-テーブル-hover "> '+ ' <THEAD> <TR> <番目NG・リピート= "$インデックスによってresult.titleトラック中のLi"> <ボタンクラスは= "BTN" NG-バインド= "李" > </ button>の</目> </ TR> '+ '</ thead要素>' + ' <TBODY> <TR NG・リピート= "$インデックスによってLIST2トラックでLIS"> <TDのNG・リピート=「LI $インデックス」NG-バインド= "李"> </ TD> <によってLISトラックで/ TR>」+ '</ TBODY>' + '</ TABLE>' + '<DIR-tableloadショー= "detail_pagin_init.tableload"> </ DIR-tableload>' + '<DIR-ページネーションの設定= "detail_pagin_init"ページネーション・コンフィグ= "detail_pagin_config"> </ DIR-ページ付け>'、 tipHtmlAllMehtods:{ INIT:関数(){ この= VAR。 tradeApiの .query({ メソッド: 'ポスト'、 ルート'icaudit'、 URL: '/ protsis / get_detail'、 データ:{ ID:single.id、 .then(関数(RES){ =のRES that.result; that.list2 = res.data; }); } } })。 }。
八つのチェックボックスサービス:
1、各種の初期化、そのような初期化状態ラジオとして、現在のページがすべての状態の初期化を選択し、すべてのページを選択し、初期化状態、選択された項目の配列の初期化、選択された項目未確認アレイの初期化;
2、各このような無線機能をクリックすると、関数の種類をクリックし、現在のページセレクト機能をクリックし、[すべてのページが選択されたアイテムID機能のすべてを取得する機能を選択し、
9、サービスデザインのアイデア(requestServer)を要求
非同期リクエストオブジェクトを取得するために、1を
(1) $ q.deferのDeferredの作り方= VAR();
2、確認応答を送信する前に、
(1)のみが消失ポップ「キャンセル」、他の操作は、
(2)、「OK」をクリックしない要求を送信し続け、そしてallParamsのDeferredの引数
(送信前、直接that.sendServer(allParams、のDeferred)送信要求確認3)が存在する場合、
3を、非同期リクエストは、例を返さない
(1)戻りdeferred.promise;。
。4、機能パッケージsendServer
(1)this.http =関数(allParams 、繰延){}
(2)allParamsで固定パラメータ:方法、URL 、toServerParams、stayLocalParams
内側(3)allParamsパラメータを有することができる:responseType、負荷は、他のパラメータが存在し得る
(4)転送 $ HTTPサービスでは、返す関数を定義するために正式な要求を送信するために
5を、$ HTTPサービスの戻り関数の定義を
(1)移植の成功は、関数stayLocalParamsに従って行われます
(2)戻り値判定に応じて、ログインページにジャンプするには、2秒後に、ポップでポップアップエラーメッセージが期限切れ
要求は、ポップとポップの成功のヒント成功した場合、(3)の戻り値に応じて、クリックし、ポップアップメニューが消え
4( )要求が失敗した場合、戻り値に応じて、着床不全関数
(5)上記の状況の後、その後の仕事関数は、一旦移植実行
6は、最終的に(3)4ロードキャンセル機能
特定することにより、7定義注入機能を使用シナリオを提供します
付属書:合計コンテキストのindex.html => main.js =>一般的 -dirのモジュールとタグ=> = UIビュー>ログイン
1、アプリケーションモジュール定義angular.module( 'アプリ'、[])。
2、実行ステージローディングモジュールにおいて、モジュールのカスタム構成angular.config(関数($ urlRouterProvider){ $ urlRouterProvider.otherwise(「/ログイン」);})
ログイン成功後のユーザ情報(1)、ユーザ=ルート戻り、 sessionStorage.setItem(ルート、ユーザ情報を返す)
(2)が返さユーザ情報に基づいて、ナビゲーションバー割当ての左側
(3)ナビゲーションバータブの最初の列の状態に行く
3、角最初のアプリケーションの実行一度だけ実行する方法、グローバルデータやロジックの起動を定義します
angular.run(関数($ rootScope){ / *グローバル変数は、ここで初期化することができます* / $ rootScope。$ ON( '$ stateChangeStart'、 機能(イベント、toStateプロパティ){ 時間/ *は、状態を変更しようとしている、この関数が実行され 1、ユーザー名が空白の場合、ユーザー名を確認し、ログインページにジャンプ 2、状態へのアクセスは、存在しない場合、デフォルトのイベントを防ぐために、ポップにリマインダーを与える場合は、現在のページにジャンプします* / } ); $ rootScope。 $(「$ stateChangeSuccess」、上の 機能(イベント、toStateプロパティ){ 時間/ *状態変化が完了すると、この機能の実装がある item.stateで1、現在の状態=ターゲット状態、HTMLページでは、もしクリック機能(アイテム)===アイテムのスタイル変更、現在の状態、 2、ルートタブ= item.sub、HTMLページ、ルートタブを横断します* / } ); })
4、右上のボタンがログインし
(1)が正常に終了するには、ルート= nullは、sessionStorage.removeItem(ルート)は
(2)の状態は、ログインするために行く
5、およびナビゲーションバー会カードオプション
の左を通過する(1) ;ナビゲーションバーには、テキストを結合、機能(アイテム)、スタイルをクリックし
、(2)クリック(項目)機能、ルートタブ= item.subは
、テーブル内の項目をクリックして、その後、テーブルの詳細:PS
1は、状況はで説明しました
(そこ右側左端の1)「テーブル」アイコン、アイテムを拡張することができることを示している
(2)、右のアイコンをクリックして他のアイコンは、右のダウンになり、アイコンの右変更のアイコンながら、離れてテーブルドロップダウンダウン、要求が背景に送信されたアレイは右下、空の配列でない場合、ドロップダウンテーブルの行空のプロンプトが表示されている場合、データが返され
た場合を達成するために、2を
基に各元のデータテーブルを横断する:(1)HTML名前= "li.id == ID 'a.png商品 :? 'b.png''" 決断イメージ名、NG-ショーによる= "li.isMaster === ' 1'" 画像を表示するかどうかを判断します
( 2)HTML:メインテーブルの各次のデータがNG-ショー=「li.id == IDにより、プルダウン形式の各々を横断するように戻されるで 」メインテーブルを展開次の表のかを決定する
(3)JS:IDを定義
JS(4):ブランキングID === li.id IDとブロック実行ならばカスタムクリック機能は、クリアデータを順次、返されますID === li.id、戻り空の配列プロンプト(または戻りデータ)場合、リターンを得るための要求を返信
3、総論理
(1)背景は、送信要求、itemData.itemDetailプロパティの値として取得された戻り値をitemData.id得るために、関数内の関数をクリックするので、特定の戻り値を置くITEMDATA渡されたデータの「行」へ;「ライン」が関連している
(2)の表にitemData.itemDetailの詳細を横断、
附属書2、ログインページのインタラクティブなアイデア:
1、ログインページは、4つの要素があります:ログイン名、パスワード、認証コード、ログインし;
2、ログインページを開きますカーソルがログイン名に位置するとき、
図3に示すように、前のトリガーのいずれかのキーの3つの要素が「入力」、空の場合、プロンプト、それは前部であり、そのエントリが空であるかどうかをチェックし、カーソルがフォーカスされていますここで、カーソルは次のものが「ログイン」、関数の実行ログであるならば、次の焦点は、空でない場合、
4をクリックし、「ログ」はまた、ログイン機能を実行し、
図5に示すように、機能ログの定義(1 )利用可能な3~4の項目、(2)空エントリプロンプト、フォーカスカーソル場合、空きエントリが存在しない場合(3)、要求が背景に送信されたか否かをチェックする前に、
バックグラウンドを返した場合、6 1、ユーザーが名前に促され プレゼンスは、ユーザー名にカーソルを置き、背景は3を返した場合、あなたは、コードのエラーを確認するメッセージが表示され、検証コードにカーソルを置き;それは4を返した場合、ログインが成功した背景には、パスワードにカーソルを置き、パスワードエラーの入力を求め、その後、2を返す場合。