如何编译$ http请求返回的数据?

时间:2013-07-30 22:10:01

标签: angularjs angularjs-directive

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

$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将指令绑定到angular。在我对angular的理解以及如何在动态加载的模板中绑定指令时,我显然缺少一些基本的东西。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:-1)

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