javascript - 如何在 Controller 之间传输数据

标签 javascript angularjs angularjs-scope

我有 Angular 并面临一个问题:我有一个 SPA,其中包含带有 Controller 的两个部分,数据从 json 文件返回。第一个 Controller 用于显示菜单,第二个 Controller 用于添加新项目。现在 json 文件中有两个对象,但是当我在第二个 Controller 中添加第三个项目时,当我返回第一页时它就消失了。我该如何修复它?我读过工厂可以在 Controller 之间传输数据,但我从未使用过它。

Angular 模块:

var myApp = angular.module("testModule", ['ngRoute']);

myApp.config(function ($routeProvider){
    $routeProvider.when('/', {
        templateUrl: 'pages/main.html',
        controller: 'mainCtrl'
    })
    .when('/add', {
        templateUrl: 'pages/add.html',
        controller: 'addCtrl'
    })
})



myApp.controller("mainCtrl", function ($scope, $http) {
            $http.get("model/data.json").success(function (response) {
                $scope.list = response;
            })                  

    });

myApp.controller("addCtrl", function ($scope, $http) {

            $scope.addAdv = function(newAdv){
                $http.get("model/data.json").success(function (response) {
                    response.push({
                        name: newAdv.name,
                        shop: newAdv.shop 
                    });
            })
        }; 
    });

JSON 文件:

[{
    "name": "New Item",
    "shop": "Titan"
},
{
    "name": "New Item1",
    "shop": "Titan"
}]

最佳答案

您可以使用 Angular 服务在 Controller 之间共享数据。 您应该首先创建从服务器获取信息的服务

var app = angular.module('app', ['ngRoute']);
app.service('dataService', function($http) {
  var data = {};
    data.list = [];
  var getData = function(){
    $http.get("model/data.json").then(function (response) {
      data.list = response.data;
    },function(err){});

  }
    return {
        getDataFromServer:getData,
        getData:data,

    }
});

现在您可以在 Controller 中使用此服务:

app.controller("mainCtrl", function ($scope, dataService) {
       dataService.getDataFromServer();      

});

app.controller("addCtrl", function ($scope, dataService) {
    $scope.data = dataService.getData;
    $scope.data.list.push({
        name:"foo",
        shop:"bar"
    });
});

这是 jsfiddle 代码: https://jsfiddle.net/xqn5yu8g/

有关 Angular 服务的更多信息,请查看 angularjs services document page

关于javascript - 如何在 Controller 之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43902680/

相关文章:

javascript - 如何使用 ng-show 和 ng-click 使移动菜单 Angular 化?

javascript - AngularJS 用 <select> 中的对象填充 $scope.selected

javascript - AngularJS 范围定义的函数为 null

javascript - 如何从 Mongoose 的对象中查询数据?

javascript - 从我的 channel 中提取最后 3 个 YouTube 视频

javascript - Angular ng-repeat 过滤器在数据检索之前运行

Angularjs:ng-bind-html 和 ng-repeat

javascript - 使用 CSS transform scale() 在不裁剪的情况下放大元素,保持滚动

javascript - browserify错误: http. createServer不是一个函数

javascript - 在angularjs中更改选择选项时调用函数