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

Angularjs 如何将json作为字符串参数传递给指令,angularjs,Angularjs,当我尝试评估下面的json表单时,它会给我一个错误- eval("{form: 'form' , nameToMatch: 'password1'}") 为什么上面的表格无效 不过,以下各项适用— eval("{form: 'form'}") 我试图将上面的json作为字符串传递给指令,作为参数输入 下面是html- <input type="password" name="password2" ng-model="user.confirmPassword" placeholder="

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

eval("{form: 'form' , nameToMatch: 'password1'}")
为什么上面的表格无效

不过,以下各项适用—

eval("{form: 'form'}")
我试图将上面的json作为字符串传递给指令,作为参数输入

下面是html-

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

谢谢,
Murtaza

在你的json周围放上括号:

 eval("({form: 'form' , nameToMatch: 'password1'})")
但这似乎不是一个有棱角的问题。不确定你想做什么:

无论如何,要将json传递给指令,有很多方法可以做到这一点。我不知道你为什么要这么做,而不仅仅是传递一个物体

传递json有很多方法

  • 从属性对象:

    app.directive('foo', function () {
       return function(scope, element, attrs) {
           var obj = eval('(' + attrs.foo + ')');
       };
    });
    
    在哪里

    在哪里

    在哪里

    在哪里

    
    

    我希望这会有所帮助。

    看起来您正在尝试确认表单中的密码。有很多方法可以做到这一点,而无需借助JSON在AngularJS中传递值。我在网上找到的最有用的资源来自这个Google群组线程:

    1) 会比较 第二个字段中的值与第一个字段的模型值

    (二) 将第二个字段中的值与 第一个字段的输入值

    这种差异可能很微妙,但有实际的后果:与 (2) 确认验证将在您开始键入时立即生效 第一个领域的任何东西。使用(1)确认验证将 只有在第一个字段有效后才开始。在电子邮件中确认 例如,这意味着您将不会开始显示确认错误,直到 电子邮件验证错误被整理出来(因此用户可以专注于其中一个) 当时的错误)

    资料来源:

    从中,指令的使用方式如下:

    电子邮件
    重复电子邮件
    
    其中,
    ui validate equals
    指令指向在第一次输入中定义的
    email
    模型

    如果您还想在那里寻找解决问题的其他方法,那么这里有一些方法。

    @Blesh在这里提到了,但没有强调:Angular为您提供了一个“安全”版本的
    eval()
    ,如果您不想在自己的范围内声明声明声明性对象/数组,并且明智地不想使用本机
    eval()
    ,它非常适合将声明性对象/数组传递到指令中。在OP的示例中,只需在指令中使用:

    angular.$eval(attrs.match);
    
    但这似乎不是一个有棱角的问题

    同意-vanilla JS可以处理得很好

    // Markup (HTML)
    <div mydirective='{"test1": "foo", "test2": "bar"}'></div>
    
    // App (JS)
    JSON.parse(attrs['mydirective']);
    
    //标记(HTML)
    //应用程序(JS)
    parse(attrs['mydirective']);
    
    在angular中使用JSON.parse(字符串)。请确保您的参数是字符串格式。

    Blesh感谢您的回答。是的,传递一个对象是我想要做的,你能提供任何正在这样做的链接吗。由于某种原因,我无法使它工作。上面的代码不起作用,否则我想传递对象,我如何使它起作用?我更新了答案,加入了双向绑定和隔离作用域的内容,用于传递实际对象。
    angular.fromJson
    也可能是比使用
    eval
    更好的方法。
    <foo json-in="{'test':'wee'}"></foo>
    
    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>
    
    angular.$eval(attrs.match);
    
    // Markup (HTML)
    <div mydirective='{"test1": "foo", "test2": "bar"}'></div>
    
    // App (JS)
    JSON.parse(attrs['mydirective']);