问题是,我有一个简单的指令来从支持的(JSP 页面)获取数据(它有一个从角度调用函数来为 js 模型设置一些值,但是当我得到响应时调用函数是 x 次....
这是样本
当您看到控制台日志时,然后单击“加载表单 JSP”按钮,
首先是 3 次调用方法,接下来是 6 次......
这是 google grupe angularJS 中的主题 https://groups.google.com/d/msg/angular/18a_Iqkdbtk/eDuZ4OLfwJMJ
问题是,我有一个简单的指令来从支持的(JSP 页面)获取数据(它有一个从角度调用函数来为 js 模型设置一些值,但是当我得到响应时调用函数是 x 次....
这是样本
当您看到控制台日志时,然后单击“加载表单 JSP”按钮,
首先是 3 次调用方法,接下来是 6 次......
这是 google grupe angularJS 中的主题 https://groups.google.com/d/msg/angular/18a_Iqkdbtk/eDuZ4OLfwJMJ
我在你的例子中修复了一些东西,现在它只调用了两次函数(这实际上是正确的,因为这就是$digest的工作方式,它会调用绑定直到没有变化,所以每个至少 2 次。
你的 plunker 的工作叉:http ://plnkr.co/edit/Aw6S6T?p=preview
关键部分在这里:
app.directive('angularHtmlBind', function($compile, $http) {
return function(scope, elm, attrs) {
var $elm = $(elm),
url = 'search.jsp',
html,
currentScope;
function getHTML(url) {
$http.get('search.jsp').success(function(data) {
html = data;
currentScope = scope.$new();
$elm.html(html);
$compile($elm.contents())(currentScope);
}).error(function(data, status, headers, config) {
console.log(data);
});
}
scope.$watch(attrs.shown, function(value) {
if (value) {
getHTML(url);
} else if (currentScope) {
$elm.contents().remove();
currentScope.$destroy()
}
});
};
});
您的实施存在两个问题,您是:
当然,这个例子可以进一步改进,但我假设您多次加载示例文件只是为了说明问题;)如果没有,则调用它一次,然后使用存储内容的html var。