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