我有一个角度问题我有一个带有简单控制器的项目,该控制器从服务器加载数据 我想通过验证验证数据并更改其显示 我出于两个原因使用指令而非过滤器 1.我改变了DOM,这在我看来更像是一项指令工作 2.表现。
我之前已经询问了指令与过滤器的问题,我和评论员都认为指令更合适。
现在我有这个问题, 从服务器加载单个对象并将其设置为单个$ scope属性时。该指令未设置其值 但是当使用带有ng-repeat的数组时,一切都运行良好。 问题是为什么以及你认为什么应该是最好的方法
两个测试的演示代码
app.controller('controller1',['$scope', 'HttpService', function($scope, HttpService) {
HttpService.get().success(function(data) {
$scope.item = data;
$scope.item[0] = data;
});
}]);
app.directive('directive1', ['ValdataionService' , function (ValdataionService){
return {
restrict: "A",
scope: {
},
link: function (scope, elem, attrs) {
var input = attrs.validateData;
if(ValdataionService.isValid(input)) {
elem.html('<div class="success">' + input + '</div>');
} else {
elem.html('<div class="error">' + input + '</div>');
}
}
}
}]);
/* HTML */
<!-- THIS DOES NOT WORK -->
<div directive1 validate-data="{{item.input}}"></div>
<!-- THIS DOES WORK -->
<div ng-repeat="it in items">
<div directive1 validate-data="{{it.input}}"></div>
</div>
答案 0 :(得分:0)
我认为&#34;为什么&#34;可能是一个更简单的问题。 ng-repeat实际上并没有开始添加到DOM,直到数组中有数据为止。
我能够&#34;移动&#34;一些事情,让我的工作在我的最后。我认为您应该考虑将条件表达式放在指令的模板中,而不是直接通过链接函数添加html。还可以尝试将validateData var添加到指令私有范围并设置一些绑定。
scope:{
validateData: ''
},
template:'<html code here>'