1

在一个基于 Angular 的小型应用程序中。我创建了两个控制器,然后希望这两个控制器都使用工厂方法从 mysql 数据库中获取数据。当我对它们进行硬编码时,我可以传递一组记录。但是如果我尝试通过 http 和/或使用资源来获取它们,我将无法做到这一点。

最重要的是......我不确定什么是最好的方法。你能帮忙吗?

var myApp = angular.module('myApp', ['ngResource']);
myApp.factory('Data', function() {
  var person = [
    {name: "Mark Webber", sex: "Male", skills: "none", team: "webdev"},
    {name: "Danny Web", sex: "Male", skills:"asdsad", team: "webdev"},
    {name: "Steffy Graph", sex: "Female", skills:"ada", team: "accounts"},
    {name: "Anna Martin", sex: "Female", skills:"asdsa", team: "webdev"}
  ];
  return person;
});

function tricoreContrller($scope, Data, newData) {
  $scope.users = Data;
  console.log(Data);
}

function webdevController($scope, Data, newData) {
  $scope.users = newData;
  console.log(newData);
}

这两个控制器都可以与很酷的Data交互。但这是硬编码的。我想要来自我想来自ajax的服务器的实际数据。我该怎么做。

如果有的话,使用 $resource 有什么特别的好处吗?我尝试了文档,但没有太大帮助。

4

1 回答 1

4

为简单起见,请使用$http 模块(请参阅$http 与 $resource)。这还有一个优点,即 $http 返回一个您应该能够按如下方式使用的承诺(改编自delaying-controller-initialization)。

function tricoreContrller($scope, data) {
  $scope.users = data;
}

function webdevController($scope, data) {
  $scope.users = data;
}

var resolveFn = {
    data : function($http) {
        return $http({
            method: 'GET', 
            url: 'http://server/getJSON'
        });
    }
};
tricoreContrller.resolve = resolveFn;
webdevController.resolve = resolveFn;

var myApp = angular.module('myApp', [], function($routeProvider) {
    $routeProvider.when('/', {
        templateUrl: '/editor-tpl.html',
        controller: tricoreContrller,
        resolve: tricoreContrller.resolve
    });
    // same for the other route for webdevController
});

或者,如果两个控制器在同一路由上并且一个包含在另一个中,则使用 访问父控制器的范围可能更容易$scope.$parent.data

于 2013-02-16T17:59:38.727 回答