数组作为字符串传递给custom指令

时间:2014-08-20 16:06:41

标签: javascript angularjs angularjs-directive

我创建了具有隔离范围的cusotm指令。但是当我传递给我的类型为Array的指令变量时,我正在获取String inside指令。

我的指示:

angular.module('my.directives')
    .directive('testDirective', [function() {
        return {
            restrict: 'A',
            replace: true,
            scope: {
                myArray: '@'
            },
            controller: function($scope) {
                alert("Is arr: " + angular.isArray($scope.myArray)); // outputs false                 
            }
        };
    }
]);

用法:

<div ng-repeat="currentObject in list">
    <div test-directive my-array="{{currentObject.arrayOfNumbers}}"></div>
</div>

变量currentObject.arrayOfNumbers是100%的类型数组 - 我使用angular.isArray方法在我的控制器中检查它,但是当它在指令中传递时我只得到一个字符串。

即。如果

currentObject.arrayOfNumbers = [1,2,3,4]

然后在指令内我有完全相同的字符串:"[1,2,3,4]"

1 个答案:

答案 0 :(得分:4)

这是因为您没有正确使用双向绑定。您通过执行以下操作设置属性my-array的文本: -

<div test-directive my-array="{{currentObject.arrayOfNumbers}}"></div>

将其更改为: -

<div test-directive my-array="currentObject.arrayOfNumbers"></div>

这样对象将被正确绑定到指令中的2路绑定范围变量。

并将myArray: '@'更改为myArray: '=': -

如果您正在进行myArray:'@'文字绑定,请执行JSON.parse($scope.myArray)$scope.$eval($scope.myArray))

<强> Demo