我想在两个不同的控制器上共享两个变量,一个嵌套到另一个控制器中:
approach1:
<body ng-controller="WGHomeLanCtrl">
<section><div><a>{{text}}</a></div></section>
<section>...</section>
<section ng-controller="WGHomeSurveyCtrl"> <div> <a>{{lan}} and {{lan2}}</a></div></section>
在我的控制器文件中,我有:
var HomeControllers = angular.module('HomeControllers', []);
HomeControllers.controller('WGHomeLanCtrl', function($scope, $http) {
$scope.lan = "en";
$http.get("lan/lan_".concat($scope.lan, ".json")).success(function(data) {
$scope.text = data;
});
HomeControllers.controller('WGHomeSurveyCtrl', ['$scope',
function($scope) {
$scope.lan2= $scope.text;
$scope.lan = $scope.$parent.lan;
}]);
实际结果是,父控制器中的{{text}}显示出来,这意味着$ http部分正常工作。在子范围内,{{lan}}也显示正确的值;但{{lan2}}显示不正确; {{lan2}}显示为纯文本。
有什么想法?谢谢!
答案 0 :(得分:0)
text
由于$ http呼叫延迟而被lan2
分配text
后, lan2
会更新,因此text
成为{{text}}
所在的text
那一点。
最简单的解决方案是在视图中使用lan2
。但是,如果它不是一个选项(例如,如果text
可能用于其他内容并且已更改),那么您可以添加观察者或发出消息并在{{1}}时更新{{1}} }已更新。
顺便说一下。所有父范围的变量都应该在子范围内可用。