在你的 json 周围加上括号:
eval("({form: 'form' , nameToMatch: 'password1'})")
不过,这似乎不是一个有角度的问题。不确定您要做什么:
无论如何,要将json传递给指令,有很多方法可以做到这一点。我不确定您为什么要这样做,而不仅仅是传递一个对象。
传递 json 可以有很多方法......
从您的属性对象:
app.directive('foo', function () {
return function(scope, element, attrs) {
var obj = eval('(' + attrs.foo + ')');
};
});
在哪里
<div foo="{'test':'wee'}"></div>
从一个孤立的范围:
app.directive('foo', function () {
return {
restrict: 'E',
scope: {
'jsonIn' : '@'
},
link: function(scope, element, attrs) {
var obj = eval('(' + scope.jsonIn + ')');
};
};
});
在哪里
<foo json-in="{'test':'wee'}"></foo>
eval
但是,如果可以的话,不惜一切代价避免使用本机要好得多。在几乎所有情况下你都可以。如果您有一些数据,只需将其放在作用域参数上的对象中,然后通过隔离作用域上的双向属性或按名称传递它,然后对其执行角度 $eval。
编辑:传递一个对象...
您可以在隔离范围上使用两种方式绑定:
app.directive('foo', function (){
return {
restrict: 'E',
scope: {
'data' : '='
},
link: function(scope, elem, attrs) {
console.log(scope.data);
}
};
});
在哪里
<foo data="{ test: 'wee' }"></foo>
这样做的真正酷之处在于,如果您使用的是作用域属性,它将双向更新:
app.controller('MainCtrl', function($scope) {
$scope.bar = { id: 123, name: 'Bob' };
});
在哪里
<foo data="bar"></foo>
我希望这会有所帮助。