【问题标题】:Angular directive with multiple models具有多个模型的 Angular 指令
【发布时间】: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


【解决方案1】:

您应该使用@ 它将获取指令的值。其击球手在自定义指令中使用属性类型指令。 可能的范围比较类型

     scope: {
            type: '@type' //will take value for user as string
            type: '&type' // will except expression 
            type: '='     //match everthing
            type: '=type'   //matchies scope valiable/object name
            }

【讨论】:

  • 我使用“类型”来了解我想使用哪种类型的键盘布局。到目前为止,我对此没有任何疑问。但是,我现在正在单击键盘时更新模型。想象一个有 5 个文本框的表单,底部有键盘指令。当焦点是 textbox1 时,当我在键盘上键入时,它必须更新 textbox1 及其模型。与 textbox2,3,4,5 相同。谢谢
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 2016-08-13
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多