角度ng-repeat不更新,当使用jQuery内部指令调用Angular 方法时
angular ng-repeat not updating, when angular method is called with jquery inside directive
(第一次使用 Angular 的用户(
所以我尝试调用我创建的角度方法addField
函数(如果我使用 ng-click 调用它,它会起作用(,当另一个元素使用 jqueryUI 可拖动和可拖放时。
拖放工作正常,它甚至可以正确更新我的模型,因为当我在控制台中运行$scope.fields
时,当我在 addField
函数中中断时,它会找到我的对象。
问题是,尽管对象在那里,但它并没有像ng-click
那样在ng-repeat
html中显示它们。
角
angular.module('formApp', [])
.controller('formController', ['$scope', function($scope) {
$scope.fields = [
//{label:'The Field Title, with Angular', desc:'Lorem Ipsum Dolor', req:false},
//{label:'The Other Field Title, with Angular', desc:'Lorem Ipsum Dolor Dos', req:false}
];
$scope.addField = function() {
$scope.fields.push({label:'Added Form Title', desc:'Added Form Desc', req:true});
//$scope.fieldLabel = '';
console.log("addField");
};
}])
.directive('drag', function() {
return {
restrict: "A",
link: function(scope, elem, attrs) {
$( elem ).draggable({
helper: "clone",
activeClass: "ui-state-default",
hoverClass: "ui-state-hover",
drop: function( event, ui ) {
}
});
}
}
})
.directive('drop', function() {
return {
restrict: "A",
link: function(scope, elem, attrs) {
$( elem ).droppable({
hoverClass: "holder-state-highlight",
drop: function(event, ui) {
//handleDropEvent(event, ui);
//sortOrder();
angular.element('#theForm').scope().addField();
}
});
}
}
});
发生这种情况是因为 jQuery drop 回调发生在 Angular 框架之外,所以 Angular 不知道它正在发生。 在这种情况下,您需要通过将 Angular 包装在 $apply
中来通知 Angular,如下所示:
.directive('drop', ['$scope', function($scope) {
return {
restrict: "A",
link: function(scope, elem, attrs) {
$( elem ).droppable({
hoverClass: "holder-state-highlight",
drop: function(event, ui) {
//handleDropEvent(event, ui);
//sortOrder();
$scope.$apply(angular.element('#theForm').scope().addField());
}
});
}
}
}]);
您可以在此处阅读有关Angular $apply
功能的更多信息。
相关文章:
- 角度控制器功能不;在指令内部调用时,似乎无法始终如一地工作
- 如何在angularjs中对指令内部的JSON数组使用过滤器
- $watch使用隔离范围时从角度指令内部更改值
- Angular 指令内部 HTML 重新编译,动态创建绑定属性
- 从指令内部访问内插值
- AngularJS:如何在指令编译和链接后从指令内部运行JavaScript
- 如何传递ng模型对象而不是指令内部的值
- 指令内部的DOM查询
- 将html附加到具有范围值的指令内部
- Angular ui路由器阻止指令内部的状态触发
- http调用位于指令内部的控制器内部
- 从另一个控制器中的指令内部定义的一个控制器调用方法:AngularJS
- Angular从指令内部的输入中删除无效内容
- angular-如果src错误,则在指令内部拼接数组
- 如何在指令内部用innerHTML插入的html上使用ng-bind
- 改变ng-repeat from指令内部的作用域
- AngularJS:在指令内部的链接函数中访问json响应
- 如何从指令内部观察变量的变化
- 指令内部的模板
- 在没有应用指令函数的指令内部重复