如何创建受限指令
How to create a restricted directive?
我正在试验AngularJS和NG表,但无法解决以下问题:
我正在NG表中显示Django应用程序中的User对象集合。模型的属性之一是布尔值,指示对象是否处于活动状态。我想使用AngularJS指令显示Font Awesome集合中的字形,而不是显示true/false。
从各种样品中,我得到了以下内容。
模块:
var main = angular.module("main", ["ngTable"]);
检索要在表中显示的对象:
main.factory('User', function ($http) {
return {
async: function() {
var promise = $http.get('api/v1/users').then(function (response) {
return response.data["objects"];
});
// Return the promise to the controller
return promise;
}
};
});
控制器和将布尔值转换为字形的指令:
main.controller("UsersCtrl", function ($scope, $filter, ngTableParams, User) {
User.async().then(function(data) {
$scope.tableParams = new ngTableParams({
page: 1,
count: 4,
sorting: {
name: 'asc'
}
},{
total: data.length, // length of data
getData: function ($defer, params) {
// use build-in angular filter
var orderedData = params.sorting() ? $filter('orderBy')(data, params.orderBy()) : data;
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
});
}).directive('boolean', function () {
return {
restrict: 'E',
link: function (scope, elem, attrs) {
var userObject = scope.userObject;
if (userObject["active"]) {
console.log("active");
console.log(elem);
elem.html = "<i class='fa fa-check text-success fa-lg'></i>";
} else {
console.log("not active");
console.log(elem);
elem.html = "<i class='fa fa-times text-danger fa-lg'></i>";
}
}
}
});
然后在我的HTML模板中:
<table ng-table="tableParams" class="table">
<tr ng-repeat="propertyObject in $data">
<td data-title="'Name'" sortable="'name'">
[[ userObject.name ]]
</td>
<td>
<boolean>[[ userObject.active ]]</boolean>
</td>
</tr>
</table>
由于与Django模板约定的冲突,我不得不将Angular默认的双花括号改为方括号。
该表显示ok,但对于我的boolean directive
,它无法显示字形,仍然只显示true或false。通过登录控制台,我可以检查实际的对象,它们看起来是正确的。我显然错过了什么,但如果能提供任何帮助。。。
您遇到的问题是,在尝试操作元素html之前,需要让ng-repeat
完成它的摘要。有几种方法可以做到这一点,使用attrs.$observe
或$timeout
。
通常情况下,在元素被呈现为之前,您的代码就已经启动了
对于你正在做的事情,你可以简单地使用ng-class
,而不需要指令
<table ng-table="tableParams" class="table">
<tr ng-repeat="propertyObject in $data">
<td data-title="'Name'" sortable="'name'">
[[ userObject.name ]]
</td>
<td>
<i class='fa fa-times fa-lg'
ng-class="{'text-danger':!userObject.active,'text-success':userObject.active}">
</i>
</td>
</tr>
</table>
或者,您可以真正简化指令,使用ng-class
仅将<i>
返回为template
相关文章:
- AngularJs指令,该指令创建内部有数据对象的新指令
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- 如何使用自定义指令创建 angularjs 动态模板
- 香草JS到角度指令;创建使用角度指令的 DOM 元素
- 角度指令创建html 5视频播放器
- 在 AngularJs 中使用指令创建读取更多/更少切换
- 为Angular指令创建的元素创建名称
- 如何在Angularjs中使用按钮点击指令创建选择选项
- 如何为Angularjs指令创建仅限输入的参数
- 更新ng repeat using指令创建的图像
- Angular指令创建——使用多个模板
- 如何用angularjs指令创建可重用的组件
- Angular指令创建画布并下载为图像
- AngularJS -指令链接函数不会在元素从另一个指令创建后触发
- 指令创建[下载]按钮
- 无法在单击单个按钮时删除使用指令创建的表的选定行
- AngularJs:如何对指令创建的动态元素应用Form验证
- 如何将不同的ng模型值分配给从一个指令创建的多个输入字段?
- 指令创建flash警报