javascript - AngularJS ngclick 切换函数调用

标签 javascript jquery angularjs

尝试切换具有启动和停止功能的按钮。

这是 Controller

App.controller('LogPhoneMainController',
function LogPhoneMainController($scope) {

var self = this;

$scope.header = "Log a phone call";

$scope.stopwatches = [{ log: [] }, { interval: 1000, log: [] }, { interval: 2000, log: [] }];
});
App.filter('stopwatchTime', function () {
return function (input) {
    if(input){

        var elapsed = input.getTime();
        var hours = parseInt(elapsed / 3600000,10);
        elapsed %= 3600000;
        var mins = parseInt(elapsed / 60000,10);
        elapsed %= 60000;
        var secs = parseInt(elapsed / 1000,10);
        var ms = elapsed % 1000;

        return hours + ':' + mins + ':' + secs + ':' + ms;
    }
};
})
.directive('bbStopwatch', ['StopwatchFactory', function(StopwatchFactory){
return {
    restrict: 'EA',
    scope: true,
    link: function(scope, elem, attrs){   

        var stopwatchService = new StopwatchFactory(scope[attrs.options]);

        scope.startTimer = stopwatchService.startTimer; 
        scope.stopTimer = stopwatchService.stopTimer;
        scope.resetTimer = stopwatchService.resetTimer;

    }
};
}])
.factory('StopwatchFactory', ['$interval',    function($interval){

return function(options){

    var startTime = 0,
        currentTime = null,
        offset = 0,
        interval = null,
        self = this;

    if(!options.interval){
        options.interval = 100;
    }

    options.elapsedTime = new Date(0);

    self.running = false;

    function pushToLog(lap){
        if(options.log !== undefined){
            options.log.push(lap); 
        }
    }

    self.updateTime = function(){
        currentTime = new Date().getTime();
        var timeElapsed = offset + (currentTime - startTime);
        options.elapsedTime.setTime(timeElapsed);
    };

    self.startTimer = function(){
        if(self.running === false){
            startTime = new Date().getTime();
            interval = $interval(self.updateTime,options.interval);
            self.running = true;
        }
    };

    self.stopTimer = function(){
        if( self.running === false) {
            return;
        }
        self.updateTime();
        offset = offset + currentTime - startTime;
        pushToLog(currentTime - startTime);
        $interval.cancel(interval);  
        self.running = false;
    };

    self.resetTimer = function(){
        startTime = new Date().getTime();
        options.elapsedTime.setTime(0);
        timeElapsed = offset = 0;
    };

    self.cancelTimer = function(){
        $interval.cancel(interval);
    };

    return self;

};


}]);

这是我的 html。

<div class="container">
<div class="row">
    <div ng-controller="LogPhoneMainController" ng-init="init()">
        <h2>{{header}}</h2>
        <div ng-repeat="options in stopwatches|limitTo:1">
            <div bb-stopwatch options="options">
                <div class="container">
                    <div class="stopWatch numbers">
                        {{options.elapsedTime | stopwatchTime}}
                    </div>

                    <button class="btn" ng-click="startTimer()">start</button>
                    <button class="btn" ng-click="stopTimer()">stop</button>
                </div>
            </div>
        </div>
        <div ng-view>

        </div>
    </div>
</div>
</div>

我想要唯一的一个 btn,ngclick 需要切换它调用的函数并相应地显示开始或停止。

更新:

我试过了

$scope.startStop = "";

位于 Controller 中,下面位于我的工厂

 self.startStopTimer = function (startStop) {
        if (startStop === "Start") {
            startTimer();
            $scope.startStop = "Stop";
        } else {
            stopTimer();
            $scope.startStop = "Start";
        }
    };

我将该代码放入我的 Controller 中,html 按钮如下所示

<button class="btn" ng-click="startStopTimer()">
                        {{startStop}}
</button>

但我的范围未定义(编辑:由于函数所在的位置,我未定义 startStop)

最佳答案

在 Controller 中实现切换逻辑并 使用 Controller 设置按钮文本。

<button class="btn" ng-click="startStopTimer()">{{startStop}}</button>

在 Controller 中仅实现一个函数startStopTimer 并根据 startStop 的值切换按钮中的文本。

关于javascript - AngularJS ngclick 切换函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31852220/

相关文章:

javascript - react 开发工具未在 Chrome 浏览器中加载

javascript - 在 AngularJS 中添加第二个过滤器而不破坏第一个过滤器

javascript - 相对于另一个分区的 Bootstrap 列高度

javascript - 如何从 Json 创建动态 JavaScript 对象?

javascript - 错误 jquery 验证插件取决于。当字段无效时表单有效

angularjs - Node JS 中的 Angular CryptoJs 加密而不是解密 CryptoJS

javascript - 仅触发 jQuery 中最内层元素的点击事件

javascript - 使用 MCAutocomplete Jquery UI 在 MVC 中多列返回未定义

javascript - 避免 $timeout() 强制摘要在 Angular 中完成

javascript - PHP json_decode 不适用于对象 GET 变量