嗨大家好我想编写一个角度指令,将输入文本编码为html。
这样就可以转换关键字符。例如ö - > &安培; ouml
我找到了this漂亮的库,我想用它。
我的问题是我想只在我的模型中进行此转换。用户不应该看到任何内容。
现在我尝试过这种方式。但这不符合我的要求。我是棱角分明的新手并不熟悉指令。 也许你可以帮助我。
angular.module('schwimmfestivalAngApp')
.directive('encodedInput', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, ctrl, he) {
element.bind('onblur',
function () {
ctrl.$modelValue = he.encode(ctrl.$viewValue, {
'useNamedReferences': true
});
}
)
;
}
};
});
答案 0 :(得分:1)
这绝对不是初学者的任务,因为您需要有更多使用Angular的经验才能使其按预期工作。
在Angular指令中操作视图和模型之间的数据有两个部分。可以从模型转换为视图,另一个转换从视图转换为模型。基本上,您应该在两个方向上操作数据,因此当您的模型包含满足您要求的操纵值时,您的视图会显示某些内容。
您应该实施$render
功能来帮助这一部分:
ngModelController.$render = function() {
...
}
这部分可能会实现几件事。您方案中最重要的事情可能是调用$setViewValue
函数
element.on("blur", function(evt) {
ngModelController.$setViewValue(...);
});
由于我们希望更改数据模型值而不是查看模型值,因此命名可能会有点误导,但直接从文档中读取此摘录:
调用
$setViewValue
时,新值将暂存,以便通过$parsers
和$validators
管道进行投放。如果没有指定特殊ngModelOptions
,则直接发送阶段值进行处理,最后应用于$modelValue
,然后应用ng-model
属性中指定的表达式。最后,调用$viewChangeListeners
列表中的所有已注册的更改侦听器。
但是还有指令解析器可以在将视图值提交给模型之前对其进行操作。
ngModelController.$parsers.push(customParser);
function customParser(value) {
return /* some value */;
}
请务必仔细阅读ngModelController documentation。
确保通过仅添加控制台日志来实现本文档中提到的其他几个要点,以便掌握指令执行周期。
答案 1 :(得分:0)
感谢Robert的提示。我想我现在已经弄明白了。
对我来说它有效,但似乎并不是完美的方式。
现在这是我的指令如何查找的。
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "taggable" of relation "taggings" does not exist
LINE 1: INSERT INTO "taggings" ("taggable") VALUES ('onetag1 (Lead)'...
^
: INSERT INTO "taggings" ("taggable") VALUES ('onetag1 (Lead)')