Angular JS父控制器无法将单独的变量传递给子控制器

时间:2014-07-03 23:37:31

标签: javascript angularjs

我想在两个不同的控制器上共享两个变量,一个嵌套到另一个控制器中:

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}}显示为纯文本。

有什么想法?谢谢!

1 个答案:

答案 0 :(得分:0)

text由于$ http呼叫延迟而被lan2分配text后,

lan2会更新,因此text成为{{text}}所在的text那一点。

最简单的解决方案是在视图中使用lan2。但是,如果它不是一个选项(例如,如果text可能用于其他内容并且已更改),那么您可以添加观察者或发出消息并在{{1}}时更新{{1}} }已更新。

顺便说一下。所有父范围的变量都应该在子范围内可用。