如何将json作为字符串参数传递给指令

mur*_*a52 8 angularjs

当我尝试评估下面的json表格时,它给了我一个错误 -

eval("{form: 'form' , nameToMatch: 'password1'}")
Run Code Online (Sandbox Code Playgroud)

为什么上述表格无效?

但是以下工作正常 -

eval("{form: 'form'}")
Run Code Online (Sandbox Code Playgroud)

我试图将上面的json作为字符串传递,作为指令的param输入.

下面是html -

<input type="password" name="password2" ng-model="user.confirmPassword" placeholder="Confirm Password" match="{form: 'form', nameToMatch: 'password1'}" required="required"/>
Run Code Online (Sandbox Code Playgroud)

谢谢,穆尔塔扎

Ben*_*esh 23

把parens放在你的json周围:

 eval("({form: 'form' , nameToMatch: 'password1'})")
Run Code Online (Sandbox Code Playgroud)

虽然看起来不是一个有角度的问题.不确定你要做什么:

无论如何,要将json 传递给指令,有很多方法可以做到这一点.我不确定你为什么要这样做,而不仅仅是传递一个对象.

通过json可以通过很多方式完成......

  1. 从您的属性对象:

    app.directive('foo', function () {
       return function(scope, element, attrs) {
           var obj = eval('(' + attrs.foo + ')');
       };
    });
    
    Run Code Online (Sandbox Code Playgroud)

    哪里

    <div foo="{'test':'wee'}"></div>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 来自孤立的范围:

    app.directive('foo', function () {
       return {
         restrict: 'E',
         scope: {
          'jsonIn' : '@'
         },
         link: function(scope, element, attrs) {
           var obj = eval('(' + scope.jsonIn + ')');
         };
       };
    });
    
    Run Code Online (Sandbox Code Playgroud)

    哪里

    <foo json-in="{'test':'wee'}"></foo>
    
    Run Code Online (Sandbox Code Playgroud)

但是eval,如果可以的话,最好避免不惜一切代价使用本机.在几乎所有情况下你都可以.如果你有一些数据只是将它放在一个范围参数的对象中,并通过隔离范围上的双向属性或名称传递它,并对其进行角度$ eval.

编辑:传递一个对象...

您可以在隔离范围上使用双向绑定:

app.directive('foo', function (){
  return {
     restrict: 'E',
     scope: {
        'data' : '='
     },
     link: function(scope, elem, attrs) {
        console.log(scope.data);
     }
  };
});
Run Code Online (Sandbox Code Playgroud)

哪里

<foo data="{ test: 'wee' }"></foo>
Run Code Online (Sandbox Code Playgroud)

这样做非常酷的一点是,如果你使用的是scoped属性,它会双向更新:

app.controller('MainCtrl', function($scope) {
    $scope.bar = { id: 123, name: 'Bob' };
});
Run Code Online (Sandbox Code Playgroud)

哪里

<foo data="bar"></foo>
Run Code Online (Sandbox Code Playgroud)

我希望有所帮助.