gpt4 book ai didi

javascript - 如果表单标签上的 html 'name' 属性具有特殊字符,Angular 会抛出错误,在我的例子中为 ':'

转载 作者:行者123 更新时间:2023-11-28 18:15:16 24 4
gpt4 key购买 nike

我正在开发一个 Salesforce 项目,我正在考虑使用 Angular JS 来实现它的 super 功能。 Salesforce 使用动态 ID 作为名称和 ID 等表单属性的前缀。例如,如果表单属性 namecustomer_registration,则它将变为 i10_j30:customer_registration

当表单的名称属性包含特殊字符(在我的例子中为“:”)时,Angular 会抛出错误。

我有以下问题。

  1. 如果浏览器允许,为什么 Angular 不允许在表单名称中使用“:”。
  2. 有哪些可能的解决方法可以解决此问题。

最佳答案

AngularJS Developer Guide -- Migrating from 1.3 to 1.4

表格

由于94533e57 ,表单元素的 name 属性现在只能包含可以作为 Angular 表达式的一部分进行计算的字符。这是因为 Angular 使用 name 的值作为可赋值表达式来设置 $scope 上的表单。例如,name="myForm" 将表单分配给 $scope.myForm,而 name="myObj.myForm" 将其分配给 $scope.myObj.myForm.

以前,也可以使用 name="my:name" 这样的名称,因为 Angular 对表单名称使用了特殊的 setter 函数。现在使用通用的、更强大的 $parse setter。

因此,迁移代码的最简单方法是从名称属性中删除所有特殊字符。

如果需要保留特殊字符,可以使用以下指令,该指令会将名称替换为可以在编译函数中计算为表达式的值,然后在 postLink 中重新设置原始名称功能。这可以确保 (1) 表单在范围内发布,并且 (2) 表单具有原始名称,如果您正在进行服务器端表单提交,这可能很重要。

angular.module('myApp').directive('form', function() {
return {
restrict: 'E',
priority: 1000,
compile: function(element, attrs) {
var unsupportedCharacter = ':'; // change accordingly
var originalName = attrs.name;
if (attrs.name && attrs.name.indexOf(unsupportedCharacter) > 0) {
attrs.$set('name', 'this["' + originalName + '"]');
}

return postLinkFunction(scope, element) {
// Don't trigger $observers
element.setAttribute('name', originalName);
}
}
};
});

关于javascript - 如果表单标签上的 html 'name' 属性具有特殊字符,Angular 会抛出错误,在我的例子中为 ':',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40847010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com