Angularjs 使用角度计时器停止单个计时器

Angularjs 使用角度计时器停止单个计时器,angularjs,timer,Angularjs,Timer,我有一个应用程序正在使用,但我无法停止单个计时器。当我在第一个计时器上单击timeout时,它会将它们全部停止 基本上,我根据员工的姓名制作个人计时器,如下所示: index.html ... <md-card class="md-padding"> <md-content-card> <md-input-container> <label>Employee</label> <md-select ng-mo

我有一个应用程序正在使用,但我无法停止单个计时器。当我在第一个计时器上单击timeout时,它会将它们全部停止

基本上,我根据员工的姓名制作个人计时器,如下所示:

index.html

...
<md-card class="md-padding">
  <md-content-card>
  <md-input-container>
    <label>Employee</label>
    <md-select ng-model="employeeName">
      <md-option ng-repeat="employee in employees" value="{{employee.name}}">
        {{employee.name}}
      </md-option>
    </md-select>
  </md-input-container>
  <center>
  <md-button class="md-raised md-primary md-hue-2" ng-click="startTimer()">Time In</md-button>
  </center>
  </md-content-card>
</md-card>

<md-card ng-repeat="(key, value) in times">
  <md-content-card>
  <center>
    <h2>{{ value.employeeName }}</h2>
    <h3>Time In At: {{ value.date | date: 'medium' }}</h3>
    <h3>
      <timer interval="1000">{{hours}} hour{{hoursS}}, {{minutes}} minute{{minutesS}}, {{seconds}} second{{secondsS}}.</timer>
    </h3>
  <br>
  <md-button class="md-raised md-accent md-hue-2" ng-click="stopTimer()">Time Out</md-button>
  </center>
  </md-content-card>
</md-card>
...

角度计时器基于控制器范围内引发的事件。如果在一个作用域上定义了多个计时器,那么所有这些计时器将一起启动和停止

幸运的是,您在这里使用的是
ng repeat
,它创建了一个新的作用域,并且计时器嵌套在其中

您只需访问此作用域即可引发停止特定计时器的事件。 当按钮的事件处理程序被调用时,此指向
ng repeat
的范围,因此此操作有效

  $scope.stopTimer = function (){
        this.$broadcast('timer-stop');
    };

您能否将停止计时器的实现更改为使用此。$broadcast并查看它是否工作。由于ng repeat创建了一个新的作用域,所以在我不熟悉这个计时器的情况下也可以在这里检查,我认为它的工作原理与其他计时器一样,您可以在ng repeat中创建时为它分配一个特定的ID。然后你可以把那个ID和你的停止广播一起传递,只瞄准那个计时器,而不是杀死所有的计时器。@Chandermani你的建议非常有效。谢谢,太好了!那么让我把它作为一个答案加上,你可以在回答的问题上做标记。
  $scope.stopTimer = function (){
        this.$broadcast('timer-stop');
    };