AngularJS ng-repeat和attrs

时间:2014-06-15 20:11:36

标签: angularjs

我有HTML:

<load ng-repeat="item in widget" type="item.type"></load>

指令:

app.directive('load', function() {
    return {
        templateUrl: function (element, attrs) {

            console.log(attrs.type);
            return 'templates/camera.html';
        },
        replace: true,
        restrict: 'E',


    };
});

attrs.type返回字符串item.type,如何获取item.type的值?数组中的Ofc是类型。

3 个答案:

答案 0 :(得分:0)

编辑:

你的templateUrl是一个函数吗? ???

正确的指令是这样的:

    app.directive('load',function(){
      return{
       restrict:'E',
       templateUrl:'yourTemplate.html'
       link:function(scope,elem,att){
        console.log(att.type)
         scope.$apply(function(){
             scope.types.item = att.item;// you can overrite like this , or use push() to scope.types
             // this way you have access to your item in your templateUrl ;
             // Remeber , there should be a $scope.types={} in your controller!!!!
             // after this , in your templateUrl if you write {{types.item}}
             // you can get your data 
          })

         }

 }

});

添加花括号{{item.type}}

       <load ng-repeat="item in widget" type="{{item.type}}"></load>

答案 1 :(得分:0)

假设范围内有一个名为“type”的变量,则需要使用link而不是template。然后您可以使用以下内容:

link: function (scope, element, attrs) {
    var variableName = attrs.type.split(".")[0];
    var attribute = attrs.type.split(".")[1];
    console.log(scope[variableName][attribute]);
};

应该这样做。祝你好运!

请参阅The Plunker: http://plnkr.co/edit/M2p27P5yGZC273AcTxOM?p=preview

其他笔记

  • 在尝试访问该项之前,您应该检查该项是否存在。如果不是,你可能会得到类似cannot access type of undefined之类的内容。
  • 这仅适用于对象名称和类型。如果你想要比这更复杂,你应该考虑使用正则表达式来解析属性。

答案 2 :(得分:0)

在你的链接功能中,尝试:

var type = scope.$eval(attrs.type);