【发布时间】:2015-07-17 09:00:24
【问题描述】:
我试图在某些事件之后运行指令,例如,一些点击或模型更改。这是我的指令的外观:
.directive('enclose', function ($window, $http) {
return function (scope, elm, attrs) {
if (scope.$last) {
var url = getCurrentPath($window);
var rowid = scope.row.entity.id;
$http.get(url + '/' + rowid + '/attachment').success(function (data) {
(data.length > 30) ? $(elm).removeAttr('disabled') : $(elm).attr('disabled', 'disabled');
})
}
};
长话短说:指令检查一行是否附加了文件;如果是这样,它会启用下载按钮。
在显示数据的表格中,有很多行,并且有分页控件。因此,当我单击下一页(f.e.)时出现问题,表中显示的所有数据都会更新,但指令不会。我的意思是,指令不会再次运行,更新每个按钮的启用/禁用属性。
我有两种方法:一,在我的控制器中,我有一个范围变量,currentPage,在它更新之后,我以某种方式调用指令。顺便说一句,我正在使用 Angular UI-grid 来呈现数据。
$scope.regulationGrid = {
// ...
onRegisterApi: function (gridApi) {
$scope.gridApi = gridApi;
$scope.currentPage = $scope.gridApi.pagination.getPage();
$scope.gridApi.pagination.on.paginationChanged($scope, function () {
$scope.currentPage = $scope.gridApi.pagination.getPage();
// Here should be the directive call
});
}
};
二,在指令中使用 $watch 函数,该函数将监听 $scope.currentPage 变量的任何变化。但我没有实现让它工作,指令只在加载时运行。
有什么方法可以按需运行指令吗?因为我的指令正在加载,但是当 scope 改变时没有。
提前谢谢你!
编辑
这就是问题的外观。左表是右:第 3、4 和 8 行包含文件,因此它启用了下载按钮。 但是右表呈现错误的这个按钮,因为 directive 不再运行。它的正确值是启用的第 12、14 行。
所以重点是,点击 nextPage 按钮后如何检查这些值?
【问题讨论】:
-
尝试使用指令作为类或属性,然后动态添加类或属性...
-
指令不能被“调用”。它们是您网站的静态部分。如果要有条件地显示指令,请使用
ng-show/ng-hide。如果您想有条件地从 DOM 中添加或删除指令,请使用ng-if/ng-switch。我认为您以错误的方式解决问题-指令不应在其链接函数中进行$http调用。
标签: javascript angularjs angularjs-directive angular-ui-grid