我有一个ng-include html元素,并希望将一些数据从外部传递到 Controller 。

来自controller的主要fetches json data http webservice,然后将数据提取到作用域变量climadata中。

以下是pseudocode,但您知道了:

function mainController($scope, $http) {
    $http.get().then(
        $scope.climadata = response.clima;
    );
}

<div ng-controller="mainController">
    <div ng-include="'clima.html'" ng-controller="climaController" onload="climamodel = climadata"></div>
</div>

效果很好,但是climadata永远不会到达climaController。检查如下:
function climateController($scope) {
    console.log($scope.climamodel); //prints "undefinied"
};

climamodel在控制台中始终是未定义的,但是为什么呢?

最佳答案

这是可行的,获得undefined的原因是因为,您是通过$http请求获取数据的,因此,在获取数据climaController将执行之前,那时没有作用域变量调用climadata

检查这个DEMO

您可以看到控制台正在打印undefined,但是在ajax请求之后数据可用后,您将在部分HTML页面上获取数据。

如果要在ajax完成后加载inclcude,请使用ng-if

<div ng-if="climadata" ng-include="'clima.html'" ng-controller="climaController"></div>

如果存在climadata,则仅此div进程意味着include仅在climadata可用时起作用。

DEMO

你可以从onload="climamodel = climadata"中删除

08-07 21:58
查看更多