如何仅使用工厂方法在控制器之间共享数据

时间:2018-05-25 11:06:15

标签: html angularjs

到目前为止,我曾尝试过以下代码

HTML

cursor.execute("INSERT INTO time2 (col1, EventTimeZone) \
    SELECT %s, SUBSTR('%s', 24, 6) \
    FROM dual",
    (row[0], row[1]))

在我的js中

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

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

我的问题是,单击按钮后,只有数据应该在两个控制器中呈现,谢谢!任何人都可以清楚地向我解释我怎么能实现它。 在我的第二个控制器中,数据出现在按下按钮

之前

2 个答案:

答案 0 :(得分:0)

您需要向所有控制器广播活动。然后听取该事件并对其进行任何操作,例如打印您的信息。广播需要$rootScope.$broadcast以及一个监听器$scope.$on,它将执行该功能(并显示一条消息)。

这是一个有效的演示:

&#13;
&#13;
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()
  })
});
&#13;
<!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>
&#13;
&#13;
&#13;

答案 1 :(得分:-1)

工厂是一个很好的解决方案,可以使用外部文件来处理API调用的数据或类,但工厂的问题是为每个控制器创建一个新实例,尝试创建Angularjs服务(使用本教程:{{ 1}})

angular服务将为此类创建一个实例,这样您就可以在控制器之间共享数据。