1

には 2 つの異なるコントローラーがあり、1 つは言語用、langCntlもう 1 つは単語用wordCntlです。

レコードにwordCntlは という属性がありますln。 コントローラ内のレコードに基づいて、 をln使用してフォームに表示されます。ng-selectngOptionslangCntl

でレコードが変更されたときselectln更新するにはどうすればよいですか?wordCntllangCntl

langMod.js

var langMod = angular.module('langMod', ['ngResource']);

langMod.controller('langCntl',function($scope,$http) {
  $scope.langs = [];
  $scope.reset = 関数() {
    $http.get( '/lang.jsn').success( 関数(データ) {
      console.log( 'http.success: data='+data );
      $scope.langs = angular.copy($scope.origs);
    });
  };
  $scope.reset();
});

langMod.controller('wordCntl',function($scope) {
  var langElem = document.querySelector("[ng-controller='langCntl']");
  $scope.langs = angular.element(langElem)).scope().langs;
  $scope.rcd = { ln: 'en', word: '?' };
});

index.html

<html lang='en' ng-app='langMod' >
<本体>
  <ng-form ngForm='abc' ng-controller='wordCntl' >
    <select ng-model="rcd.ln" ng-options="c.lang as c.name for c in langs">
  </ng-フォーム>
</body>
</html>

(私にとって)興味深いこと:

  1. langCntl.langs変更後wordCntl.langs、空の配列のままです。
  2. ngoptionsレコードを直接使用する方法はありlangCntlますか?
4

1 に答える 1

2

angualrjs sdk の参照: $broadcast(name, args)

登録された ng.$ro​​otScope.Scope#$on リスナーに通知するすべての子スコープ (およびその子スコープ) にイベント名を下方にディスパッチします。

イベント ライフ サイクルは、$broadcast が呼び出されたスコープで開始します。このスコープで name イベントをリッスンしているすべてのリスナーが通知を受け取ります。その後、イベントは現在のスコープのすべての直接および間接スコープに伝播し、途中ですべての登録済みリスナーを呼び出します。イベントはキャンセルできません。

于 2013-11-08T09:46:00.423 に答える