1

小さな Angular ベースのアプリケーションで。2 つのコントローラーを作成し、両方のコントローラーがファクトリ メソッドを使用して 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);
}

これらのコントローラーは両方とも、クールなデータと対話できます。しかし、これはハードコードされています。ajaxから取得したいサーバーからの実際のデータが必要です。どうすればいいですか。

また、$resource を使用する特定の利点はありますか?もしあれば、良いチュートリアルはありますか? ドキュメントを試しましたが、あまり役に立ちませんでした。

4

1 に答える 1

4

シンプルにするために、$http モジュールを使用します( $http と $resourceを参照)。これには、 $http が次のように使用できるはずの promise を返すという利点もあります ( 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
});

または、2 つのコントローラーが同じルート上にあり、一方が他方に含まれている場合は、 を使用して親コントローラーのスコープにアクセスする方が簡単な場合があります$scope.$parent.data

于 2013-02-16T17:59:38.727 に答える