如何将Laravel变量传递到我的AngularJS视图中?

And*_*rew 5 javascript php laravel angularjs

我正在构建一个小型照片应用程序来学习AngularJS 1.3.我来自PHP背景,所以概念上这对我来说是相当不同的:)

我想将一个变量(我的照片文件夹的URL)传递到我的AngularJS视图(.html文件)中.我怎样才能做到这一点?

换句话说,将应用程序常量从PHP传递到AngularJS ngRoute视图的最佳实践是什么?

这是代码:

Laravel控制器方法

public function showHome()
{
    $upload_url = Config::get('app.url');
    return View::make('home')->with('upload_url', $upload_url."photos/");
}
Run Code Online (Sandbox Code Playgroud)

刀片模板

$upload_url是我想在AngularJS视图(index.html)中使用的变量.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
        <title>Test Application</title>
    </head>
    <body ng-app="app" ng-controller="mainController">

        <div class="container">

            <p>The location of the photo files is:</p>
            <p>{{ $upload_url }}</p>

            <ng-view></ng-view>

        </div>

        {{ HTML::script('assets/js/jquery-2.1.1.min.js') }}
        {{ HTML::script('https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js') }}
        {{ HTML::script('http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.min.js') }}
        {{ HTML::script('app/controllers/mainController.js') }}
        {{ HTML::script('app/services/photoService.js') }}
        {{ HTML::script('app/app.js') }}

    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

App.js

var constantsHelper = {};

var app = angular.module('app', ['ngRoute', 'mainController', 'photoService']);

app.config(function($routeProvider){
    $routeProvider.when("/",
        {
            templateUrl: "app/views/home.html",
            controller: "mainController"
        }
    );
});
Run Code Online (Sandbox Code Playgroud)

主控制器(mainController.js)

angular.module('mainController', [])

.controller('mainController', function($scope, $http, Photo) {

    Photo.get()
        .success(function(data) {
            $scope.photos = data;
        });

});
Run Code Online (Sandbox Code Playgroud)

照片服务(photoService.js)

angular.module('photoService', [])

.factory('Photo', function($http) {

    return {

        // Get all the photos
        get : function() {
            return $http.get('/api/photos');
        }

    }

});
Run Code Online (Sandbox Code Playgroud)

...最后是我的Angular视图(home.html)

我想photo.filename$upload_url我的刀片模板(来自showHome()我的Laravel控制器的方法)中的值作为前缀.

<div class="photo" ng-repeat="photo in photos">

   <div class='row'>
       <div class='col-md-10 col-md-offset-1'>
           <div class='loaded-image mb25'>
               <img src='{{ photo.filename }}'>
               <p>{{ photo.description }}</p>
           </div>
       </div>
   </div>

</div>
Run Code Online (Sandbox Code Playgroud)

谢谢!任何可以让我走上正确道路的指针都值得赞赏:)

编辑:

我有它工作,但不知道这是否是最好的做法!

我已将此添加到我的刀片模板的底部:

<script>
    constants = {};
    constants.upload_url = {{ $upload_url }}}";
</script>
Run Code Online (Sandbox Code Playgroud)

并修改了主控制器以使用常量传递$scope.

angular.module('mainController', [])

.controller('mainController', function($scope, $http, Photo) {

    Photo.get()
        .success(function(data) {
            $scope.photos    = data;
            $scope.constants = constants;
            console.log(constants);
        });

});
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用index.html简单地访问上传​​网址{{ constants.upload_url }}.

所以......它有效,但我不知道这是不是hacky;)

任何输入将不胜感激!

yaz*_*aki 6

我想知道这是否是最好的做法.但是,如果值不需要是安全的,那么从服务器传递常量值的最简单方法之一就是这样.

在HTML中.

<script type="text/javascript">
    var _config = {
        key1: server_value1,
        key2: server_value2
    };
</script>
Run Code Online (Sandbox Code Playgroud)

在角度模块运行方法中.

angular.module('yourapp', [])
    .run(function($rootScope) {
        $rootScope.config = _config;
    });
Run Code Online (Sandbox Code Playgroud)

在你的控制器中.

console.log($scope.config);
Run Code Online (Sandbox Code Playgroud)