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
しかし、可能であれば、ネイティブの使用は絶対に避けたほうがよいでしょう。ほとんどすべての場合、これは可能です。一部のデータがある場合は、それをスコープ付きパラメーターのオブジェクトに配置し、分離スコープの双方向プロパティを介して渡すか、名前で渡し、angular $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>
それが役立つことを願っています。