Angularjs 如何将json作为字符串参数传递给指令
当我尝试评估下面的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="
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']);