我有一个反复出现的问题,我无法使用通过$ 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的理解以及如何在动态加载的模板中绑定指令时,我显然缺少一些基本的东西。任何帮助将不胜感激。
答案 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包含在该指令中。