Игра в Phaser — JavaScript и события в AngularJS

Как я могу выполнить метод AngularJs из простого javascript?

myApp.controller("someController",["$scope",function($scope){
  //Some code was here
  $scope.a = valueA;
  $scope.b = valueB
});

И чуть позже в коде нужно выполнить функцию, которая, когда она действительна, может выполнить IF, и если это так, выполнит мой контроллер AngularJS или что-то еще.

function Clicked(){
if( was clicked correctly ){
    //execute my Controller and send some data to add to the DOM
}

Я не хочу, чтобы мои элементы HTML вызывали функцию внутри вашего контроллера. Я знаю, что могу создать свой холст из моего контроллера AngularJS, а затем, поскольку я нахожусь внутри контроллера, у меня будет более легкий доступ к нему. Но я хотел знать, могу ли я каким-либо образом выполнить его из-за пределов Angular, чтобы оставить свой контроллер легким и простым.

Потому что; то, что я хочу сделать, это соединить небольшую игру, которая у меня есть в Phaser Framework, с некоторыми внешними элементами, которые я сделал в AngularJS. Думайте об этом как о телевизоре, только днища и контроллеры находятся в Phaser, а экран — это часть Angular. Так что в основном, когда что-то происходит в части Phaser, я хочу сообщить части Angular.


person Julian    schedule 28.08.2014    source источник
comment
На самом деле у меня нет конкретного ответа, но вы можете подумать о том, чтобы получить $rootScope из своего приложения и использовать $rootScope.$broadcast('yourevent'), чтобы сообщить всему приложению о щелчке.   -  person Ryan Kinal    schedule 28.08.2014


Ответы (1)


Наконец у меня есть решение,

var intermediary;

myApp.controller("someController", ["$scope",function($scope){

  intermediary = function(fn){
        var phase = $scope.$root.$$phase;
        var value;
        if(phase == '$apply' || phase == '$digest') {
            if(fn && (typeof(fn) === 'function')) {
                value = fn();
                if(value){
                    $scope.valIntermediary = value;
                }
            }
        } else {
            $scope.$apply(function() {
                value = fn();
                if (value) {
                    $scope.valIntermediary = value;
                }
            });
        }
    };

  $scope.$watch("valIntermediary",function(){
      //Do something whit a value var inside my controller
  });
}]};

if(intermediary){
   intermediary(function(value) {
      return { /*Some data when click is true*/}
   })
}
person Julian    schedule 29.08.2014