我创建了具有隔离范围的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]"
答案 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 强>