6

我在我的 Mac 上使用 AngularJS 1.0、PHP 和 mysql 和 localhost。

我有一个非常简单的 mysql 数据库:“猫”。它有一张叫做“小猫”的桌子。该表有两列,“id”和“name”。数据库中有三只小猫,名字分别为 Larry、Curly 和 Moe。

现在,我有一些简单的 PHP 代码可以打开 dbase,获取三个记录,并以 JSON 格式返回它们,如下所示:[{"id":"1","name":"Larry"},{"id": "2","name":"Curly"},{"id":"3","name":"萌"}]

我使用了最新的 angular-seed 并在 Eclipse 中建立了一个项目。在 app.js 我写了这个:'use strict'; angular.module('Cats', ['ngResource','Cats.filters', 'Cats.services', 'Cats.directives']) 我将我的 PHP 代码放在 services 文件夹中,并将其命名为“index.php”。如果我在 Mac 上使用 localhost 在浏览器中导航到该 services/index.php,我会返回上面的 JSON。到目前为止,一切都很酷。

现在 - 我要做的所有事情(!著名的遗言;)就是连接到我拥有的 PHP 服务,并使用我的 AngularJS 项目在我的主索引页面上显示该 Cats 表的内容。纯旧文本,没有表格,只需绑定到可用资源并显示它。

我已经尝试过各种在线演示(很多都已过时)。谁能告诉我一种简单的当前方法来做到这一点?在我的一生中,我有各种各样的 AngularJS 演示工作,但没有一个以我能理解的方式完成这个简单的任务。

先感谢您。

4

2 回答 2

4

这也应该有效。它的代码行数明显减少,但请注意已删除任何错误处理:

function FetchCtrl($scope, $resource) {
  var services = $resource('../services/index.php');
  $scope.data = services.query();
}
FetchCtrl.$inject = ['$scope', '$resource'];

通常我会使用内置.get()方法,$resouce但您的响应是数组的形式,.query()默认情况下支持。

您可以在此处找到文档$resource

于 2012-07-02T22:44:48.920 回答
3

好的。解决了。首先,复制并添加了我在其中一个示例中找到的控制器:

    function FetchCtrl($scope, $http, $templateCache) {
        $scope.method = 'GET';
        $scope.url='../services/index.php';  
        $scope.fetch = function() {
            $scope.code = null;
            $scope.response = null;

            $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
            success(function(data, status) {
                $scope.status = status;
                $scope.data = data;
            }).
            error(function(data, status) {
                $scope.data = data || "Request failed";
                $scope.status = status;
            });
        };

        $scope.updateModel = function(method, url) {
            $scope.method = method;
            $scope.url = url;
        };
    }

然后,我在我的模块中添加了一个路由控制器:

var module = angular.module('Cats', ['ngResource','Cats.filters', 'Cats.services', 'Cats.directives'])
    .config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/main', {templateUrl: 'partials/partial1.html', controller: MyCtrl1});

最后,在那个 partial1.htm 页面上,我添加了这个:

<div ng-init="fetch()">
    {{data}}
</div>

现在,当我在浏览器中访问该页面时,我可以看到整个数据库以 JSON 格式转储。啊。显然有很多更复杂的事情要尝试,等等,但我需要这个简单的结果,所以我可以确定我确实有一个模型在被召唤时到达。在许多情况下,Angular 会默默地死去,因此可见的结果非常有帮助。

一个问题:请注意,php 文件可以由多个用户执行,而不是您自己。我不知道 AngularJS 实现的用户的名字,但我必须chmod 644 index.php这样应用才能使用它。

我希望这对某人有所帮助。

于 2012-07-01T09:51:24.380 回答