2013-02-06 7 views
7

これについて質問がありましたが、いずれも$scope.$apply(),を呼び出すか、入力に対してchange()メソッドをトリガーすることで解決されるようです。しかし、私はそれがそれらの方法のいずれかで動作するように見えることはできません。このフィドルでは、ボックスに名前を入力して、タイプするときにモデル値を更新することができます。しかし、リンクをクリックすると、入力値を特定の値に設定するために、モデル名を更新する必要があります。私は何をする必要がありますか?DomからのAngular JS更新モデル

私がこれをやろうとしている理由は、ユーザーがブラウザの自動入力またはLastPassなどを使ってフォームを自動入力するときに、私の角型モデルを更新できるようにすることです。確かに、DOMからモデルをリフレッシュする角度コマンドがありますか?

http://jsfiddle.net/PXCUq/

$(function() { 
    $('#setFirstName').click(function() { 
     $('input.firstname').val('Test Name'); 
     angular.element($('input.firstname')[0]).scope().$apply(); 
     // Model still not updated 
    }); 
}); 
+0

このようにしない理由はありますか?「set first name」? –

+0

ブラウザフォームの自動入力機能を使用するための回避策を探しています。これは、問題を示すために、ユーザーの入力なしで値を変更する簡単な方法です。 –

答えて

5

その後、NG-モデルのプロパティを変更し、スコープを取得します。

$('#setFirstName').click(function() { 
    var scope = angular.element($('input').get(0)).scope() 
    scope.firstname = 'Test Name'; 
    scope.$apply(); 
}); 

方が良いjQueryのセレクタを思い付くことができます。私は角度の部分だけに焦点を絞っていました。

Fiddle

+0

これは仕事の並べ替えです...だから、DOMからモデルをリフレッシュするには、すべての要素を実行し、そのng-model属性を取得し、そのようなモデル値を設定する必要があります。 Angularではこれを行う方法はありませんか? –

+0

スコープを取得するためにすべての要素を通過する必要はありません。一度スコープを取得するだけです。同様に、以下のようになります:scope = angle.element($ div 'ng-view]> *)[0])。 – slowpoison

関連する問題