0

我有一个带有自定义模块的 Drupal 站点,我用它来调用 Angular 应用程序。

这是模块代码:

/**
 * Implements hook_menu().
 */
function portfolio_menu() {
  $items = array();

  $items['portfolio'] = array(
    'access arguments' => array('access content'),
    'title' => t('Portfolio'),
    'page callback' => 'portfolio_page', 
  );

  return $items;
}

/**
 * Page callback: Displays Your Application on the page.
 *
 * @see your_application_menu()
 */
function portfolio_page() {
  $path = drupal_get_path('module', 'portfolio');
  drupal_add_js($path . '/lib/angular/angular.js');
  drupal_add_js($path . '/lib/angular/angular-resource.js');
  drupal_add_js($path . '/js/services.js');
  drupal_add_js($path . '/js/app.js');
  drupal_add_js($path . '/js/controllers.js');
  drupal_add_js($path . '/js/filters.js');
  drupal_add_css($path . '/css/app.css');
  drupal_add_css($path . '/css/bootstrap.css');
  return theme('portfolio');
}

function portfolio_theme($existing, $type, $theme, $path) {
  $theme = array();

  $theme['portfolio'] = array(
    'variables' => array(),
    'template' => 'portfolio',  
  );

  return $theme;
}

应用程序.js:

angular.module('portfolio', ['tickerFilters', 'tickerServices']).
  config(['$routeProvider', function($routeProvider) {
  $routeProvider.
    when('/tickers', {templateUrl:'...portfolio/partials/ticker-list.html',   controller: TickerListCtrl}).
    otherwise({redirectTo: '/tickers'});
}]);

这是 drupal 加载的最后一个 tpl.php 文件:

<div ng-app="portfolio" ng-init="user = <? json_encode($user); ?>">
  <div ng-view></div>
</div>

我的问题是如何在调用应用程序时将 drupal $user 对象传递给 angular,以便可以在 angular 应用程序中使用 $user 数据?

4

2 回答 2

1

您不回显您需要使用<?=的 json_encode 的输出,并且 json_encode 的输出包含双引号,因此您需要将它们更改为单引号

<?= str_replace('"', "'", json_encode($user)); ?>
于 2013-09-20T22:11:39.323 回答
1

您也可以将 $user 变量添加到 Drupal.settings,然后在 angular .config 或控制器中使用它

function portfolio_page() {
  $settings['user'] = $user;
  drupal_add_js(array('portfolio' => $settings), 'setting');

然后在 angular.config 或控制器中使用它

angular.module('portfolio', ['tickerFilters', 'tickerServices'])
  .config(['$routeProvider', function($routeProvider) {
    var user = Drupal.settings.portfolio.user;
  }]);
于 2013-11-14T11:03:41.280 回答