Angular / Laravel - 从mysql数据库输出json数据

时间:2017-01-07 18:42:21

标签: php mysql angularjs laravel laravel-5

我正在获取数据,我希望使用laravel查询构建器从mysql输出并将其转换为JSON格式,正如w3Schools建议的那样 W3schools SQL link 然后使用AngularJS帮助打印获取的mysql数据,但它似乎什么都没做,它显示了一个空白页面。

Laravel路线

Route::get('/' ,  [
    'as' => 'homepage',
    'uses' => 'indexController@main'
]);

的IndexController

class IndexController extends Controller
{
    public function main(){
      $data =  json_encode(array('user_posts' =>\DB::table('posts')
                ->orderBy('added_on', 'desc')
                ->get()));

    return view('index', ['posts' => $data]);
    }

}
使用AngularJS控制器的

index.php视图

<head>

            <!--Angulare -->
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js"></script>
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.js"></script>
            <!--Applicazione -->
            <script src="js/app.js"></script>
            <script src="js/controller/PoolController.js"></script>
            <script src="js/service/poolService.js"></script>
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    </head>

    <body>
      <div ng-app="myApp" ng-controller="customersCtrl">

      <table>
        <tr ng-repeat="x in names">
          <td>{{ x.username }}</td>
          <td>{{ x.age }}</td>
        </tr>
      </table>

      </div>





   ### Angular Module and controller ###
      <script>
      var app = angular.module('myApp', []);
      app.controller('customersCtrl', function($scope, $http) {
          $http.get("/")
          .then(function (response) {$scope.names = response.data.user_posts;
          });
      });
      </script>
    </body>

Json输出它的样子:

{"user_posts":[{"id":1,"username":"Moly","age":22,"added_on":"2017-01-05 08:51:18"},
{"id":2,"username":"katja","age":22,"added_on":"2017-01-05 08:51:18"},
{"id":3,"username":"rumanova","age":22,"added_on":"2017-01-05 08:51:18"}]}

到目前为止,我在AngularJS控制器中尝试过:

变化:

 $http.get("/")

使用

 $http.get("homepage")

也尝试过更改

response.data.user_posts

response.data.posts

基本上我有点失落,似乎无法理解,我做错了什么。 提前致谢

2 个答案:

答案 0 :(得分:0)

您总是返回一个永远不会是有效JSON响应的渲染视图。相反,请检查它是否是ajax请求。此外,Laravel提供了collection(),应尽可能使用原始数组或json编码来提供堆栈内聚。试试这个:

if ($request->ajax()) {
    return response()->json(collect(['user_posts' =>\DB::table('posts')
        ->orderBy('added_on', 'desc')
    ]));
}

return view('index);

此外,请务必将$request注入您的控制器方法:

public function main(Request $request) {

此外,Angular对Laravel的路线一无所知,但这没关系。如果您直接在视图文件中使用脚本,您仍然可以访问Laravel的帮助程序,则可以发出端点请求:

$http.get('{{route('homepage')}}')

否则,如果您的Angular在脚本中,只需执行:

$http.get('/');

您将使用response.user_posts在HTTP请求回调中访问它。

答案 1 :(得分:0)

您可以使用$ routeProvider而不是$ html:

app.config(['$routeProvider', function($routeProvider) {

    $routeProvider.
    when('/homepage', {
        templateUrl: '/homepage.html',
        controller: 'customersCtrl'
      });

}]);