Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计时器绑定不工作_Javascript_Angularjs_Binding_Ionic Framework_Ionic - Fatal编程技术网

Javascript 计时器绑定不工作

Javascript 计时器绑定不工作,javascript,angularjs,binding,ionic-framework,ionic,Javascript,Angularjs,Binding,Ionic Framework,Ionic,我已经创建了一个秒表工厂服务,除了运行(重置和其他未实现的功能,只需忽略它们)之外,实际上没有做很多事情 我设置了一个$scope.time来接收计时器的更改,但是它没有被更新 我尝试过很多不同的方法,我想最后一种方法是非常糟糕的做法,但我想尝试并使其发挥作用 我的看法是: <ion-view view-title="Clock"> <ion-content> <div ng-controller="controller as ClockCtrl">

我已经创建了一个秒表工厂服务,除了运行(重置和其他未实现的功能,只需忽略它们)之外,实际上没有做很多事情

我设置了一个
$scope.time
来接收计时器的更改,但是它没有被更新

我尝试过很多不同的方法,我想最后一种方法是非常糟糕的做法,但我想尝试并使其发挥作用

我的看法是:

<ion-view view-title="Clock">
  <ion-content>
    <div ng-controller="controller as ClockCtrl">
      <h1 ng-bind="ClockCtrl.time"></h1>
    </div>
  </ion-content>
</ion-view>
我的服务:

factory('Stopwatch', function() {
  var Stopwatch = (function() {
                var s;
                var isRunning = 0;
                var time = 0;
        var thatElement;
                function run(element){
                    if(isRunning !== 0){
                        time++;
                        s.mills = time % 10;
                        s.secs = Math.floor(time / 10);
                        s.mins = Math.floor(time / 10 / 60);
                        //Stopwatch.currentTime = ("0"+s.mins).slice(-2)+":"+("0"+s.secs).slice(-2)+":"+("0"+s.mills).slice(-2);
            thatElement.time = ("0"+s.mins).slice(-2)+":"+("0"+s.secs).slice(-2)+":"+("0"+s.mills).slice(-2);
                        setTimeout(run, 100);
                    }
                };

                return {
                    settings: {
                        currTime: "",
                        mills: 0,
                        secs: 0,
                        mins: 0,
                        i: 1,
                        times: ["00:00:00"],
                    },
                    currentTime: "",
                    init: function(element) {
                        thatElement = element;
                        s = this.settings;
                        this.start(element);
                    },
                    clear: function() {
                        s.i = 1,
                        s.mins = s.secs = s.mills = 0;
                        s.times = ["00:00:00"],
                        s.results.innerHTML = s.clearButton;
                    },
                    start:function(element){
                        isRunning = 1;
                        run(element);
                    },
                    stop: function(){
                        isRunning = 0;
                    }
                }

            })();
  return Stopwatch;
})
我知道最后一种方法不好,我会接受任何指针,这是我第一次使用离子,第二次尝试角度


提前谢谢

由于您使用的是
controllerAs
语法,因此需要设置控制器实例属性,而不是
$scope
对象一:

.controller('ClockCtrl', function($scope, Stopwatch) {
  this.time = "";
  Stopwatch.init(this);
});

由于您使用的是
controllerAs
语法,因此需要设置控制器实例属性,而不是
$scope
对象一:

.controller('ClockCtrl', function($scope, Stopwatch) {
  this.time = "";
  Stopwatch.init(this);
});

您应该使用自定义的时间格式过滤器。下面是一个很好的例子,用$timeout和$interval进行了解释。加上定制的过滤器。运行代码段,看看它是如何工作的,感谢您的精彩引用,但是在该示例中,代码位于控制器内部,我希望它从工厂获取。您应该使用自定义的时间格式过滤器。下面是一个很好的例子,用$timeout和$interval进行了解释。加上定制的过滤器。运行代码段并查看它是如何工作的,感谢您的精彩引用,但是在该示例中,代码位于控制器内部,我希望它从工厂提取。不幸的是,更改代码并没有改变结果。还有其他想法吗?调试时,我看到vm.time正在更改,但绑定没有更改(与以前相同)。您还需要将
this
而不是
$scope
传递到
Stopwatch.init
。是的,我在看到您的代码时也尝试过。不幸的是,更改代码并没有改变结果。还有其他想法吗?调试时,我看到vm.time正在更改,但绑定没有更改(与以前相同)。您还需要将
this
而不是
$scope
传递到
Stopwatch.init
。是的,我在看到您的代码时也尝试过。运气不好:-\