角度 - 识别范围或控制器

时间:2014-03-06 04:06:02

标签: angularjs scope controllers

我是Angular的新手(1周),想知道如何识别视图中的特定控制器。我有一个页面,运行5个单独的秒表,目前不接受任何击键。这些秒表中的每一个都使用完全相同的控制器,但是它们本身就很开心,可以根据需要单独运行。我希望能够使用击键来激活其中一个控制器,例如,如果我点击A,它将模拟按下A秒表上的“圈”按钮。但由于每个控制器名称相同,我无法确定如何将此击键发送到正确的秒表。我可能正在使用Angular,所以任何建议都会受到赞赏。 TIA。杰里米

2 个答案:

答案 0 :(得分:1)

通常;视图不会尝试直接访问控制器。您可以使用ng-controller标记将视图元素与控制器关联,如下所示:

<div ng-controller="myController"></div>

听起来你的“秒表”确实是同一个组件的五个独立实例;在这种情况下,我建议你考虑建立一个directive。指令类似于组件的Angular版本,可以包含显示代码和JavaScript代码。该指令可以定义一个控制器,当你在页面中使用该指令时,它将有五个独立的实例;所以按下一圈的按钮不应该影响其他按钮。

答案 1 :(得分:0)

由于您的键盘输入未链接到焦点元素,因此您必须绑定到body keydown keypress个事件。为此创建一个像

这样的指令
app.directive('keyCapture', function () {
    return function (scope, element, attrs) {
        $('body').bind("keydown", function (event) {
            if(event.which === attrs.filter[0]) {
                scope.$apply(function (){
                    scope.callMethod();
                });
                event.preventDefault();
            }
        });
    };
});

您现在可以将此指令与

一起使用
<div id='timer' key-capture="" filter="a"></div>
<div id='timer' key-capture="" filter="e"></div>

控制器应具有此指令可正确调用的方法callMethod

如果可以使用隔离范围,则可以使用&

将此方法作为范围对象的一部分传递