在angularjs中,在不同控制器中选择的选项 - 如何刷新?

时间:2013-11-08 09:12:29

标签: javascript angularjs angularjs-scope

有两个不同的控制器,一个用于语言,langCntl,另一个用于单词,wordCntl

wordCntl记录中的

有一个名为ln的属性。 ln使用ng-select显示在表单中,ngOptions根据langCntl控制器中的记录显示。

select中的记录发生变化时,如何在ln wordCntl刷新langCntl

langMod.js

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

langMod.controller('langCntl',function($scope,$http) {
  $scope.langs = [];
  $scope.reset = function() {
    $http.get( '/lang.jsn').success( function(data) {
      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' >
<body>
  <ng-form ngForm='abc' ng-controller='wordCntl' >
    <select ng-model="rcd.ln" ng-options="c.lang as c.name for c in langs">
  </ng-form>
</body>
</html>

有趣的是(对我而言):

  1. langCntl.langs更改后,wordCntl.langs仍为空数组。
  2. ngoptions
  3. ,有没有办法直接使用langCntl中的记录?

1 个答案:

答案 0 :(得分:2)

参考angualrjs sdk: $broadcast(name, args)

  

将事件名称向下调度到所有子范围(及其子级),通知已注册的ng。$ rootScope.Scope#$ on listeners。

     

事件生命周期从调用$ broadcast的范围开始。监听此范围内的名称事件的所有侦听器都会收到通知。然后,事件将传播到当前作用域的所有直接和间接作用域,并在此过程中调用所有已注册的侦听器。该活动无法取消。