angularjs - AngularJS 自定义事件指令不更新布局
问题描述
AngularJS $scope.$eval 不更新布局
我正在使用 AngularJs $scope.$eval 来动态执行函数。发现 $scope 的值是更新的,而布局没有更新。
testApp.directive("click", function(){
return {
link: function($scope, $element, $attr){
$element.bind("click", function(event){
$scope.$eval($attr.click);
})
}
};
});
testApp.controller('TestController', function TestController($scope) {
$scope.add = function(){
$scope.filteredData = [
{
'name' : 'name 1',
'value' : 'value 1'
},
{
'name' : 'name 2',
'value' : 'value 2'
}
];
$scope.filteredData.push(
{
'name' : 'name 2',
'value' : 'value 2'
}
);
};
});
如果我尝试添加 $scope.$apply()。布局将根据 $scope 值进行更新。
testApp.directive("click", function(){
return {
link: function($scope, $element, $attr){
$element.bind("click", function(event){
$scope.$eval($attr.click);
$scope.$apply();
})
}
};
});
解决方案
使用$apply
:
testApp.directive("click", function(){
return {
link: function(scope, element, attr){
element.on("click", function(event){
scope.$eval(attr.click);
scope.$apply();
})
}
};
});
AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 拆分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性监视等……您还可以使用$apply()
从 JavaScript 进入 AngularJS 执行上下文。
请记住,在大多数地方(控制器、服务),处理事件的指令已经为您调用了 $apply。$apply
仅在实现自定义事件回调或使用第三方库回调时才需要显式调用。
有关更多信息,请参阅AngularJS 开发人员指南 - 与浏览器事件循环集成。
推荐阅读
- sql - ORA-01841: (完整) 年份必须介于 -4713 和 +9999 之间,并且不是 0 SQL 加载程序和 TOAD 问题
- dart - 在 Dart 中检查字符串的第一个字母是否为大写
- python - Sigmoid 函数预测在导出到 DF 时会产生连续数和误差
- php - 如何提交 PHP 表单而不重定向到操作文件?(使用ajax发送和获取数据)
- react-native - 如何在 react-native 中为视频添加过滤器?在 Android 和 iOS 上
- python - 使用 matplotlib 在 PyCharm 中绘制绘图的问题
- c# - 在 db.database.BeginTransaction() 范围下添加时,Entity FrameWork Core 不响应 where() 查询 - 异常(请求超时)
- c++ - 如何在这个while循环中找到迭代次数 - 操作计数
- javascript - 在 jQuery 中替换 html 时保留事件处理程序
- c# - 如何使用 UnityWebRequest.Post() 将多个文件上传到服务器;