1

主文件(index.php)有一些会话信息,比如我想在部分(视图)中使用的用户名。这些是静态 html 文件,我更喜欢让它们保持静态。

我可以从部分的控制器调用服务器以获取数据。但是当主页加载时我有信息,并且在加载部分后它们不会改变。

如何将这些信息放在主 html 上,然后在加载时传递给部分控制器?

PS:我正在使用AngularJS 1.1.5(最近开始学习AngularJS)

更新:我在主页设置值上尝试了带有控制器的服务,并尝试读取部分控制器。我无法让它工作。

4

2 回答 2

1

内联 php 的日子已经一去不复返了——包括会话数据。

您想要做的是创建一个服务对象,它为“所有”数据调用您的“服务器端应用程序”,如果您愿意,您甚至可以将会话绑定到 JSON 对象。

此服务对象需要由其他部分共享,这些部分很可能有自己的控制器。为此,您需要能够在服务对象上的控制器之间共享数据。

于 2013-05-28T17:53:42.437 回答
1

这是我要做的:

在您的 index.php/html/whatever 中包含一个带有 Angular 服务的脚本标记,该服务捕获并返回您的数据。

<html>
    <head>

        <!-- Include Angular -->

        <script type="text/javascript">

            // By creating this service, we can capture the data from
            // from the server and store it.
            angular.module('myApp').factory('usrData', [function () {

                var data = {};

                data.usrData = <?php echo $usrService->getUserData(); ?>;

                return data;
            }]);
        </script>
    </head>
    <body>
        <!-- Continue with HTML -->

然后,您可以拥有另一个服务,例如在 service.js 中,您可以使用它来收集您从服务器捕获的内联数据以及您通过 AJAX 查询的其他数据,并创建一个 API 来管理它。您可以通过将 HTML 中的内联服务作为依赖项注入此dataServices模块来执行此操作:

angular.module('myApp').factory('dataServices', [

    '$http', 'otherData', 'usrData', // <-- These are the module dependencies

    function ($http, otherData, usrData) { // <-- Here you use them as parameters

        'use strict';

        var dataModel = {

            otherData: otherData,
            usrData: usrData
        };

        return { // Data service API

            query: function (dataType) {

                // returns data

                // API continues …

最后,在你的控制器中,比如 controller.js,你注入这个dataServices服务作为一个依赖,通过这个 API 来检索和保存你的数据:

angular.module('myApp').controller('UsrWidget', [

    '$scope', 'dataServices',

    function ctrlrPtHeader($scope, dataServices) {

        "use strict";

        $scope.usrData = dataServices.query('usrData');

        // And now you have the data.

现在,控制器可以直接访问内联到 HTML 中的 usrData 服务,但我更喜欢全局 API 来管理我的数据,方法是提供一个漂亮的 API 脚本并保持我的 HTML 尽可能干净。整个事情的秘诀是将所有数据封装在 Angular 的环境中,并通过依赖注入和工厂方法传递信息。

于 2013-05-29T00:02:27.833 回答