有两个不同的控制器,一个用于语言,langCntl
,另一个用于单词,wordCntl
。
wordCntl
记录中的有一个名为ln
的属性。 ln
使用ng-select
显示在表单中,ngOptions
根据langCntl
控制器中的记录显示。
当select
中的记录发生变化时,如何在ln
wordCntl
刷新langCntl
?
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: '?' }; });
<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>
有趣的是(对我而言):
langCntl.langs
更改后,wordCntl.langs
仍为空数组。 ngoptions
中langCntl
中的记录?答案 0 :(得分:2)
参考angualrjs sdk: $broadcast(name, args)
将事件名称向下调度到所有子范围(及其子级),通知已注册的ng。$ rootScope.Scope#$ on listeners。
事件生命周期从调用$ broadcast的范围开始。监听此范围内的名称事件的所有侦听器都会收到通知。然后,事件将传播到当前作用域的所有直接和间接作用域,并在此过程中调用所有已注册的侦听器。该活动无法取消。