2014-03-06 126 views
0

我是新来的角(1周),并想知道如何在一个视图中识别特定的控制器。我有一个包含5个独立秒表的页面,该页面当前不接受按键输入。这些秒表中的每一个都使用完全相同的控制器,但是它们都是自己的,并且非常乐意按照我的意愿单独运行。我希望能够使用击键来激活这些控制器中的一个,例如,如果我击中A,它将模拟按下A秒表上的“lap”按钮。但是由于每个控制器都是相同的名称,我无法确定如何将此按键发送到正确的秒表。我可能会错误地使用Angular,因此任何建议将不胜感激。 TIA。杰里米角 - 识别范围或控制器

+0

范围对象的一部分,您可以发布一个的jsfiddle通过这种方法吗?事件将在最近的控制器处触发。如果控制器是孤立的,就像在指令中一样,你必须触发一个发射来通知父控制器。如果控制器是兄弟姐妹,那么你可以广播它使用服务的消息。如果你可以发布一些代码,我可以帮助你更多。 – Pete

+0

我添加了一个缩小的小提琴,仅显示2个秒表。我通常在页面上有5个。我想要做的就是增加按下一个键(A)的能力,这将激活A级的Lap键,B将在B级激活Lap等。这是因为计算机在室外使用,它是一个PITA尝试快速找到鼠标指针。我可能做错了,但这是我的第一个Angular应用程序。小提琴在(http://jsfiddle.net/3Fxhu/) – user3386442

回答

1

正常运行;一个视图不会尝试直接访问控制器。您可以在视图元素与控制器采用NG-控制器标签,联想这样的:

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

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

0

由于您的键盘输入未链接到聚焦元素,因此您必须绑定到bodykeydown 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此指令将正确调用。

如果你可以使用独立的范围,你可以如使用&