为什么这个函数执行了两次
Why is this function executed twice?
我有一个树结构。JSBIN此处
在指令中
scope.add_child_task = function() {
scope.add_task(scope.path,"child of " + scope.member.name);
if (!scope.has_children) {
scope.add_children_element();
scope.has_children = true;
}
};
在控制器中
$scope.add_task = function(to,name) {
DataFactory.add_task(to,name);
};
工厂正在查找正确的位置并添加节点。
当将一个子节点添加到具有现有子节点的节点时,这是在添加两个子节点,我不明白为什么
谢谢。
编辑我可以失去has_children
,它仍然产生相同的结果
更新的JSBIN
成员链接函数
link: function (scope, element, attrs) {
element.append("<collection></collection>");
$compile(element.contents())(scope);
scope.get_path = function() {
var temp = scope.$parent.get_path();
temp.push(scope.member.name);
return temp;
};
scope.path = scope.get_path();
scope.add_child_task = function() {
scope.add_task(scope.path,"child of " + scope.member.name);
};
}
编辑2也删除了for循环——只是交换引用,只剩下一个执行了两次的函数!
更新的JSBIN
您正在编译整个元素(包括指令模板添加的部分,该部分已经编译):
element.append("<collection></collection>");
$compile(element.contents())(scope);
由于您的点击处理程序在模板中,所以第二次编译模板会导致添加第二组点击处理程序(以及其他内容)。
template: "<li>{{member.name}}" +
" <i>{{path}}</i> <a href ng-click='add_child_task()'>Add Child</a></li>",
修复:相反,使用它只编译您添加的新元素:
newe = angular.element("<collection></collection>");
element.append(newe);
$compile(newe)(scope);
更新的jsbin
相关文章:
- Meteor Router数据函数被调用两次
- Append元素在运行两次函数后不显示
- 为什么我们要在语句中两次将函数括在括号中
- 调用一个函数两次
- java-script 函数被调用两次
- Ajax Post-Submit函数提交两次
- 在一个页面中包含两次的脚本中调用函数
- 我必须点击两次才能使用jQuery激活函数
- 为什么这个函数执行了两次
- isHidden函数要求我在应用响应显示时单击两次
- 调用随机函数Javascript,但不能两次调用相同的函数
- jQuery停止函数运行两次
- JS函数只需点击一次即可触发两次
- 在一个页面中使用相同的javascript函数两次
- matchMedia调用函数两次
- JS函数中的一个点击按钮被调用了两次
- jQuery移除两次函数调用
- 在JS中定义两次函数.根据网页指示要使用的定义
- 防止在两个触发事件中执行两次函数
- AngularJS需要执行两次函数才能显示结果