我最近从jQuery切换到Angularjs,我正在为链接重新编码一些分页逻辑(" Next"," Previous"等等。)以前用jQuery风格的Javascript编写。
每个链接都有一个 ngIf 条件(例如,"上一个"链接赢了,如果您在第1页上显示,则会显示 > ngClick 事件,它实质上更新了一个名为$ scope.pagination.position的范围变量,用于确定表中显示的结果。
我的原始代码是这样的(为简洁起见而简化):
模板
<a ng-if="pagination.position > 0" ng-click="pagination.first()">First</a>
控制器
$scope.pagination = {
first: function() {
this.position = 0;
}
}
然后我学习了更多关于指令的知识,以及如何使用指令创建大多数不是静态HTML的DOM元素。所以我将每个链接(因为每个链接都有自己的显示规则和点击行为)切换到它自己的指令,如下所示:
模板
<a pagination-first></a>
指令
app.directive('paginationFirst', function() {
return {
link: function(scope,el,attr) {
scope.pagination.first = function() {
scope.pagination.position = 0;
}
},
replace: true,
template: '<a pagination-first ng-if="pagination.position > 0" ng-click="pagination.first()">First</a>'
}
});
我会直截了当地追踪:我做指令错了吗?从我的角度来看,所有这些都发生了,我已经从模板中的逻辑转变为在我的逻辑中使用模板,并且我已经在指令中定义了click事件函数而不是控制器。
这是否是使用指令的合适时间?
我想学习最佳实践,所以我很想知道我是否错过了这一点,以及原始的基于模板的ngIf和控制器功能方法是否正常,即使更长时间和比所示的更复杂的ngIf条件。
答案 0 :(得分:0)
如果我想在dom或dom列表中添加特定行为,那么我通常会创建一个指令。根据角度js的观点,dom操作只能通过指令来完成(对我而言,这是最好的地方,有时我因为缺乏知识而不得不违背这一点)。我特意在创建窗口小部件时发现指令使用完整。在我的一个项目中,有一个部分专门用于显示图像并上传图像。我只是在顶部div上使用该指令,在链接功能的帮助下,我将事件处理程序附加到各种子dom。因为我的项目不需要一个独立的范围(因为这个小部件全部用在一个项目中,外部范围在我的控制之下)。所以它就像一个魅力。我曾经过一次指令。并且通过项目的其余部分使用该窗口小部件,因为它的行为和设计(窗口小部件)在整个项目中是相同的。对于分页小部件,您可以创建指令。将指令attibutes值作为分页参数的输入。像调用脚本一样,限制偏移量。用于更新内容的容器标识符。然后你可以专注于pagianation行为。但根据我的经验(因为我在角度js方面也没有那么有经验),有时候制定指令并在整个项目中使用它会变得有点忙乱。因为在某些地方我们需要修改指令的行为。为此,它可能会破坏其他地方。但我知道,随着我学到更多,我将更有效地处理这种情况。希望我的经验对你有帮助。