【发布时间】:2015-10-08 05:08:35
【问题描述】:
我正在创建一个 Angular js 键盘指令,该指令必须可重用并且必须具有动态模板。我找到了一些教程,我能够想出这段代码
angular.module('formApp').directive('keyboard',
function ($compile, $http, $templateCache, config) {
var getTemplate = function (keyboardType) {
var templateLoader,
baseUrl = config.baseUrl + 'Scripts/controls/keyboard/',
templateMap = {
defaultKeyboard: 'default.html',
numeric: 'numeric.html',
//add more here
};
var templateUrl = baseUrl + templateMap[keyboardType];
templateLoader = $http.get(templateUrl, { cache: $templateCache });
return templateLoader;
}
var linker = function (scope, element, attrs) {
var loader = getTemplate(attrs.type);
var promise = loader.success(function (html) {
element.html(html);
}).then(function (response) {
element.replaceWith($compile(element.html())(scope));
});
}
return {
restrict: 'E',
scope: {
type: '='
},
link: linker
};
});
示例实现
<keyboard type="defaultKeyboard"></keyboard>
我认为如果我只有一个文本输入,我将永远不会有问题,因为我可以将模型绑定到指令(尚未实现),但是如果表单将有多个使用键盘指令的输入控件呢?指令如何知道要更新哪个模型?
something similar to this image
我正在考虑创建一个“活动”标识符,该标识符将在单击/选择该输入时触发,以便指令知道要更新哪个模型。这在角度上是可行的还是有更好/更清洁的方式?
谢谢
【问题讨论】:
-
目前还不清楚这应该做什么,更不用说你的问题了。由于您在指令上使用了
scope:,因此指令的每个实例都将与其他实例隔离,因此您所描述的内容(多个输入控件,知道要更新哪个)将不相关,因为每次使用该指令无论如何都无法访问任何其他输入控件。 -
@Claies 为不清楚的信息道歉。指令代码尚未完成。关于多输入控件,想象一个有 5 个文本框的表单,底部有键盘指令。当焦点是 textbox1 时,当我在键盘上键入时,它将更新 textbox1。谢谢
-
说实话,这听起来过于复杂。那么,您是否尝试设计一个用 HTML 绘制的 104 键布局,该布局由按钮组成,这些按钮以某种方式更新指令内的模型,进而在页面上其他位置的非关联输入中更新模型?重点是什么?为什么设备的普通键盘选项不适合您的目的?
-
对我来说,这听起来很难设计,甚至更难实际使用,而且并不能真正解决实际问题。除此之外,它甚至不在 Angular 旨在帮助解决的设计场景范围内。
-
我正在使用自定义键盘,因为我不需要所有 104 个键,基本上只是字母和数字,具体取决于我使用动态模板的形式。这是用于触摸设备(不是移动设备)的,如果我只能使用普通键盘,我不会在这里问。还是谢谢。
标签: angularjs angularjs-directive models