問題タブ [angularjs-rootscope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - カスタム $compile ディレクティブは、同じスコープでのみ適用される場合があります
見てくれてありがとう。私はすぐに飛び込みます:
ng-click
JSON オブジェクトには、属性を持つ HTML リンクがあり、HTML を安全にするために を使用ng-bind-html
し$sce
ます。trustAsHtml
また、カスタム ディレクティブを使用して、json がpromiseangular-compile
に読み込まれた後に角度クリック リスナーをアプリにコンパイルしました。$q
一見すると、これはすべて意図したとおりに機能します...
JSON
見る
指令
問題:
さて、それは動作します。アプリが読み込まれ、安全な HTML が提供されng-click
、モーダルが開き、パラメーターが渡されます。class='ng-binding'
周囲のp
タグ、生成されたhtmlのタグに表示されます。万歳!class="ng-scope"
a
次の業務は、進行状況を追跡する別のモデルにそのデータを書き込み、別のビューで同じng-bind
, trustAsHTML
,を実行することです。angular-compile treatment
データを兄弟オブジェクトにコピーするだけです。
ここで失敗!
同じページの同じスコープ ($rootScope) のモーダルである 2 番目のビューでは、バインドと trustAsHTML Angular が適用されます。しかし、リンクはクリック可能ではなく、タグには noclass="ng-scope"
が生成されます。a
セットアップの詳細な説明が問題の理解に役立つ場合は、ここで詳しく説明します。すべての初期アプリはコンシェルジュによってセットアップされ、ほとんどのデータは $rootScope に保存されます。
モーダルが独自のディレクティブにあるためかどうかを確認するために、サイト全体をリファクタリングするのに 2 日間を費やしましたが、同じテンプレートとスコープ内に配置しても、ここでは役に立たなかったようです。
angularjs - TypeScriptを使用したAngularJS 1:コントローラーのどこに$rootScope.onを配置しますか?
サービス
コントローラ
しかし、それは意味がありません。なぜなら、constructor
は (イニシエーションごとに) 1 回しか呼び出されないからです... :\
angularjs - $stateChangeStart ループの AngularJS
私が望む Web アプリケーションでは、ユーザーが $state にルーティングするときに、Angular はトークンがあるかどうか、およびアクセス許可があるかどうかを確認します。しかし、問題があります。event.preventDefault() を実行しても、ループが開始され、ブラウザがクラッシュします。このループを防ぎ、ユーザーが移動できるようにするか、ナビゲーションをブロックするにはどうすればよいですか?
コード:
angularjs - ng-view外のindex.htmlに情報を設定する方法
初めてangularを使用していますが、index.htmlファイルに動的情報を表示するのに問題があります。ng-view タグ内のすべてがうまく機能しています。
ユーザーが認証されると、ユーザー情報を含むグローバル変数が $rootScope と Cookie に入れられます。{{$rootScope.globals.currentUser.username}} のような方法でインデックスの $rootScope にアクセスしようとしましたが、うまくいきません。以下のコードを考えると、ログに記録されたユーザー情報を index.html に表示するにはどうすればよいでしょうか?
app.js でコントローラーを作成し、本体に ng-controller を配置しようとしました。これは機能しますが、ユーザーがログアウトしたときに更新されません (アプリ コントローラーを更新するにはページの更新が必要です)。ユーザーのログイン後も同じことが起こります (情報を表示するには、ページ全体を更新する必要があります)。
$rootScope に Cookie とオブジェクトを設定するコード。
次の index.html ファイルもあります。ご覧のとおり、{{$rootScope.globals.currentUser.username}} を設定しましたが、ユーザーがログインした後に何も表示されません
私のアプリファイルは次のとおりです
angularjs - ユーザーがプロファイルのフォーム入力を「タッチ」して保存を忘れた場合: SideMenu アイコンをクリックしたときに「POP UP」を表示する
ユーザーがプロファイルで行った編集を保存するのを忘れた場合に備えて、ある種の「エラーチェッカー/検証」を考え出そうとしました。
ユーザーは Profile.htmlを入力し
state
ます。彼らは自分の情報(名前、電話番号など) の一部を更新し始めます。SAVE CHANGES ボタンを押す代わりに、モバイル画面の左上にある SideMenu アイコンをクリックして、プロファイル状態から移動します。フォームは技術的には "
$dirty
" であると見なすようになりました。最初はこの角度プロパティを使用しようとしましたが、実際に必要な結果を得ることができなかったので、$watch
..
ProfileController.js
考えてみると、これのためにファクトリーまたはサービスを作成する必要があるかもしれませんが、当時は、このコントローラーで$rootScope
グローバル変数を設定しisFormDirty
、この Ionic でサイドメニューのロジックを保持するジェネラルコントローラーで使用できるように使用していました。アプリ。
controller.js (これは、SideMenu のコントローラーがある場所です)
それは基本的に私のコードの要点です。実際には「機能します」が、パターンを特定しました。これを達成するためのまったく異なる方法、またはこの現在のコードのリファクタリングのヒントを提案するために、あなたの支援が必要な場所です。
- ユーザーがサイドメニューボタンをクリックするとポップアップが表示されますが、フォームが $dirty であるかどうかは問題ではないと思います..
より大きな問題は、profile.html ビューまたはその他のビューを離れようとしているかどうかに関係なく、ポップアップが表示され始めることです。
このコードを書いたとき、オブジェクトを「監視」しているため、ポップアップとtoggleLeftSideMenu
関数はプロファイル ビューでのみ機能するという印象を受けましたupdateDriverProfileInfo
。また、メニュー コントローラーとプロファイル コントローラーの間で使用するグローバル変数も作成しました。
angularjs - Angular 1.5 で $rootScope にいくつかの外部 json ファイルを保存する最良の方法はどれですか?
Web アプリのフロントエンドを構築するための 3 つの json ファイルがあります。
- ユーザー権限に基づいてすべてのオプションを取得する config.json
- ユーザー設定である Preferences.json
- ユーザーが Web アプリのおかげで変更するオブジェクトである foo.json
私のメイン コントローラー、config または Run (何が最善の方法かはわかりません) で、このすべての json を読み込み、それらを $rootScope に格納して、コンポーネントのすべてのインスタンスを HTML ページに構築したいと考えています。
私はすでにこれをやろうとしました...
残念ながら、それはうまくいきません。誰かが Angular 2.0 への移行を容易にするアイデアと Angular 1.5 でそれを行うための最良の方法を持っていますか?
javascript - angular jsサービスのオブジェクトへの変更を監視して適用します
angular js サービスでオブジェクトの値を変更して適用しようとしています。
オブジェクトを正常に監視でき、変更を確認できましたが、適用して有効にすることができません。
ログインコントローラーから値を変更しています。
私は $rootScope.userobject を監視しており、私のサービスでいくつかの重要なことに使用されているため、すぐに $rootScope.userobj に変更を適用したいと考えていますが、適用されないようです。私は何を間違っていますか。以下の私のコードを参照してください