angular to server bind不使用指令

时间:2014-08-13 14:12:11

标签: javascript angularjs angularjs-directive

我有一个角度问题我有一个带有简单控制器的项目,该控制器从服务器加载数据 我想通过验证验证数据并更改其显示 我出于两个原因使用指令而非过滤器 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>

1 个答案:

答案 0 :(得分:0)

我认为&#34;为什么&#34;可能是一个更简单的问题。 ng-repeat实际上并没有开始添加到DOM,直到数组中有数据为止。

我能够&#34;移动&#34;一些事情,让我的工作在我的最后。我认为您应该考虑将条件表达式放在指令的模板中,而不是直接通过链接函数添加html。还可以尝试将validateData var添加到指令私有范围并设置一些绑定。

scope:{
validateData: ''
},
template:'<html code here>'

http://jsfiddle.net/xgbavgej/