【问题标题】:How would one run two controllers at the same time AngularJSAngularJS 如何同时运行两个控制器
【发布时间】:2015-04-29 08:59:02
【问题描述】:

我正在使用 AngularJS(使用 Yeoman)制作一个 web 应用程序,并且我有一个循环每秒向计数器加 1。这工作得很好,直到我需要带有多个控制器的多个选项卡。我尝试在主控制器中运行一个循环,但这不起作用。

我想让MoneyCtrl中的gameLoop函数一直运行,有没有更好的地方放这个函数?

有没有人知道我该如何做到这一点,或者至少达到同样的效果?

Github project

【问题讨论】:

  • 是的,您可以让多个控制器同时运行、嵌套或并排运行。请显示您的 HTML 和 JS。如果它像循环和计数器一样简单,您可能只需要一个服务或指令,具体取决于细节。您想用计数器解决什么问题,也许有其他解决方案。
  • 你能告诉我们一些代码和你面临困难的阶段
  • 添加了 Github 链接,抱歉。
  • 代码必须在问题本身,而不是在github。

标签: angularjs


【解决方案1】:

您可以将 gameLoop 函数放在run 块上。

angular.module('incrementalApp', ['ngAnimate', 'ngCookies', 'ngResource',
    'ngRoute', 'ngSanitize', 'ngTouch'
]).config(function($routeProvider) {
    //...
}).run(function($rootScope, MoneyService, Vars){

    var stop;

    $rootScope.loop = function() {
        if (angular.isDefined(stop) ) {
            return;
        }
        stop = $interval(function() {
            angular.forEach(Vars.clickers, function(clicker){
                MoneyService.addMoney((clicker.amount * clicker.production)/Vars.fps);
            });

        }, 1000/Vars.fps);

        $rootScope.stopLoop = function() {
            if (angular.isDefined(stop)) {
                $interval.cancel(stop);
                stop = undefined;
            }
        };

        $rootScope.$on('$destroy', function() {
          // Make sure that the interval is destroyed too
          $scope.stopFight();
        });
    };  

$scope.loop();
})

并使用服务来添加资金,以便您可以在每个控制器上要求服务。

【讨论】:

  • 我已将它添加到 app.js,但现在当我打开它时,Money 视图不会加载。
  • 有什么错误吗?这不应该影响控制器的视图渲染。
  • 是的,对不起,该服务有资本。感谢您的帮助。
猜你喜欢
  • 2013-04-30
  • 2023-03-18
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
相关资源
最近更新 更多