как обмениваться данными между контроллерами, используя только фабричный метод - PullRequest
0 голосов
/ 25 мая 2018

привет, пока я пробовал код ниже

HTML

    <div ng-controller="mycontroller">  <button ng-click ="clickme()"> 
  demoooooo</button>  {{message}}</div>

    <div ng-controller="hellocontroller">{{message}}</div>

в моем js

app.factory("datafactory",function("dataFactory"){
    var mouse={}
    mouse.dosum=function(){
    return "my world";
}

});

    app.controller(" mycontroller",function(){
$scope.clickme=function(){
     $scope.message=datafactory.dosum()
    }});

    app.controller(" mycontroller",function(){
     $scope.message=datafactory.dosum()
    });

, и мой вопрос заключается в том, что после нажатия кнопки толькоданные должны отображаться в обоих контроллерах спасибо!Может кто-нибудь объяснить мне ясно, как я могу достичь этого.В моем втором контроллере данные появляются до нажатия кнопки

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вам необходимо передать событие на все контроллеры.Затем прослушайте это событие и выполните любое действие, например, распечатайте ваше сообщение.Для трансляции потребуется $rootScope.$broadcast вместе с прослушивателем $scope.$on, который выполнит функцию (и отобразит сообщение).

Вот рабочая демонстрация:

var app = angular.module('myApp', []);
app.factory("datafactory", function() {
  var mouse = {}
  mouse.dosum = function() {
    return "my world";
  }
  return mouse;

});

app.controller("mycontroller", function($scope, $rootScope, datafactory) {
  $scope.clickme = function() {
    $rootScope.$broadcast("some-event");
  }
  $scope.$on("some-event", function() {
    $scope.message = datafactory.dosum()
  })
});

app.controller("hellocontroller", function($scope, datafactory) {
  $scope.$on("some-event", function() {
    $scope.message = datafactory.dosum()
  })
});
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<body>

  <div ng-app="myApp">

    <div ng-controller="mycontroller">
      <button ng-click="clickme()">Broadcast</button>
      <hr> 
      [mycontroller] {{message}}
    </div>
    <hr>
    <div ng-controller="hellocontroller">
      [hellocontroller] {{message}}
    </div>

  </div>

</body>

</html>
0 голосов
/ 25 мая 2018

Фабрика - хорошее решение для использования внешнего файла для обработки данных или класса для вызовов API, но проблема с фабрикой заключается в том, что создается новый экземпляр для каждого контроллера, попробуйте создать службу Angularjs (используйте это руководство: https://viralpatel.net/blogs/angularjs-service-factory-tutorial/)

служба angular создаст один экземпляр для этого класса, чтобы вы могли обмениваться данными между контроллерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...