3

我遇到了一个反复出现的问题,我无法使用包含在通过 $http 检索的模板部分中的指令。我假设我需要使用$compile或使用$apply模板才能使指令起作用。以下代码尝试对返回的数据使用 $apply,$http但它不起作用:

$http({
    url: 'get/data',
    method: "POST"
})
.success(function (data, status, headers, config) { 
     $scope.$apply(function () {
         $scope.data = data;
     });
})
.error(function (data, status, headers, config) { $scope.status = status; });

返回值 ( data) 只是一个包含一些 HTML 的模板,其中包含一些指令。如果我写

.success(function (data, status, headers, config) { $scope.data = data }

然后加载模板,但模板中的任何指令都不起作用。所以我想我需要使用$apply$compile将指令绑定到角度。在我对角度的理解以及指令如何绑定到动态加载的模板中工作时,我显然缺少一些基本的东西。任何帮助将非常感激。

4

2 回答 2

0

您是正确的,您需要使用 $compile 服务来处理动态加载的模板中的指令。$compile 处理一些 html 并返回一个链接函数。当使用范围调用链接函数时,它会返回带有功能指令的完全编译和链接的模板。然后必须将此模板插入到活动 DOM 中。正如 zsong 指出的那样,这意味着所有这些都应该在指令中完成,这是 Angular 中 DOM 操作的领域。在一行中:

container.html($compile(loadedHtml)(scope))

container 是 DOM 中将包含动态模板的元素。我们将其 html 设置为将编译后的 html 链接到作用域的结果。

于 2015-10-19T14:28:53.243 回答
-1

您可以通过 templateUrl ( http://docs.angularjs.org/guide/directive ) 加载模板。基本思想是您在 js 中编写指令,它与单独文件中的 html 匹配,该文件可以通过 templateUrl 包含在该指令中。

于 2013-07-30T22:27:47.830 回答