2017-01-24 13 views
2

私はサードパーティのドメインロジックを持つ巨大なjQueryプラグインを持っていました。このプラグインは、browserというオブジェクトをグローバル名前空間に公開します。角度:スコープモデルの変更に応じて非角度のjavascript変数を更新するにはどうすればよいですか?

私は簡単な角度コントローラを持っています。私は(オブジェクトの平等を使用して、平等を参照しない)、それはbrowserの変更を$watch()作られ、それに応じて範囲を更新します。

$scope.$watch(browser, function(newValue, oldValue, scope) { scope.browser = newValue; }, true); 

ファインが、今は逆の操作を行う必要があります。私は、ときに、グローバルbrowserオブジェクトを更新する必要があります$scope.browser Angularの$digestループの途中でモデルが変わります。それ、どうやったら出来るの?

おそらく、私はAngularのダーティチェックループにカスタムフックを作成する必要があります。私はこれが悪いアプローチであり、双方向バインディングの全ポイントがこれらの手動コールバックを回避することであることを理解していますが、より良い解決策を見つけることはできません。

+0

として戻って逆にすることができ、私はそれがになると思うがあなたに役立ちます。http://stackoverflow.com/questions/11873627/angularjs-ng-model-binding-not- jqueryで更新されたときの更新 –

+0

@RameshRajendranありがとう。はい、私は非角度イベントハンドラからスコープの変更は '$ apply()'コールでラップする必要があることを理解しています。しかしこれは別のケースですが、Angularのダーティチェックループのカスタムフックを作成する必要があります。そして、私はこれが悪用と悪いデザインであることを理解しています。これを避けるためにAngularが作成されましたが、とにかくより良いソリューションを見つけることはできません。 –

答えて

0

単にあなたが同じよう

$scope.$watch("browser", function(newValue, oldValue, scope) { browser = newValue; }, true); 
+0

したがって、 'browser'を見てAngularが自動的にそれを変更することを意味します。例えば、いくつかの指示文がUIでそれを修正した場合、したがって、本質的に、ブラウザは '$ scope 'の一部であるかのように動作しますか?クールですが、 'browser'変数にディレクティブがアクセスできるようにするには、' $ scope'の外ですか? –

関連する問題