これが Angularjs のルールに違反していることは承知しています。
まずは現場の話をしましょう。
ユーザーがページ A で [追加] ボタンをクリックすると、window.open によってページ B が開きます。ページ B に情報を入力した後、[保存] をクリックし、それをページ A にエコーしたいとします。次に、ページ A の情報とともにコントローラーに送信します。
私は Angularjs を初めて使用するため、引き続きページ B opener.document.getElementById を使用して親ページ (ページ A の非表示の入力値) を設定します。
ただし、ページ上の入力ビューは変更されているように見えますが、実際のモデルはまったく変更されておらず、コントローラーで取得される値はすべて未定義です。
アドバイスをお願いします
1. このように書かれている場合、コントローラーが隠しBページから返される入力値を取得するにはどうすればよいですか。
2. Angularjs の記述方法に従う場合、どのように変更する必要がありますか?
リーリー
A.js:リーリー
ページ B:リーリー
入力を変更して、JQ を使用してイベントを追加するだけです
$("#cert_valid_from").val(date1).trigger('change');
主にシミュレーションをトリガーして変更イベントをトリガーします
リファレンスコード
A.js:
リーリーBpage
リーリー必要なアラートが A.js
$scope.abv
で利用できるようになりました。ただし、このアプローチは完全に回避策であり、強く推奨されないことに注意してください
理由は、Chrome プラグインを使用して、ボタンのクリックや入力を自動的にサポートするプラグインを作成する予定ですが、プロジェクトは angular で作成されており、入力値を js で設定することはできません。モデル値を更新する必要がありますが、これには非常にコストがかかります。変更ではなく入力をトリガーする必要があることを確認するのに多大な労力がかかり、その後、フレーム間操作の問題を解決するのに多大な労力がかかりました。 。 。 。 。
くそー、答えを見つけるのに長い時間がかかりました。本当に疲れました。
要約すると、js が入力値を変更した後、イベントをトリガーする必要があります。最初は変更だと思いましたが、苦労した結果、最終的に $('input').val(123).trigger('input') が正常であることがわかりました。 🎜🎜# しかし、私のプロジェクトはより複雑です。a.html は iframe を介して b.html を参照します。どちらの HTML にも jquery と angular のセットがあるため、入力をトリガーするには b.html の jquery を使用する必要があります (バグである可能性があります)。 )、つまり
$('input',window.フレーム["f1"].contentWindow.document).val('55555555555').trigger('input')
ngModel値が更新・表示されない
参考 http://www.cnblogs.com/whitewolf/p/ngmodel-zhi-bu-geng-xin-slash-xian-shi.html
理由
1. モデルの値がフォームの検証条件を満たしていないため、Angular はそれをレンダリングしません
2. JavaScript の特別なプロトタイプ チェーン継承メカニズムにより、$scope 内の属性の割り当てを親 $scope に更新できません
理由 2 の簡単な解決策: ngModel の属性値に「.」を追加すると、JavaScript プロトタイプ チェーンの取得が開始されます。