如何从渲染的html向angularjs应用程序添加初始数据

Posted

技术标签:

【中文标题】如何从渲染的html向angularjs应用程序添加初始数据【英文标题】:How to add initial data to angularjs app from rendered html 【发布时间】:2014-05-07 12:16:43 【问题描述】:

我正在创建一个大型 AngularJs 应用程序,它需要用户登录。 在验证用户之后,一个页面被呈现给他,随后的数据被加载。

有两种方法:

页面加载后的 XHR 获取: 这意味着在“运行”块或某处发送 XHR 请求以获取 LoggedIn 用户。说给'/api/current_user.json'

嵌入在 HTML 中的数据 为了避免上述方法的初始加载时间,我认为在 html 页面中嵌入一些 JSON 作为 <script> 标签是好的。

但是,我无法从我的module.run 块中获取“脚本”标签中的这些数据。 我该怎么做?

【问题讨论】:

.constant('user',myGlobalUser) 看看 mean.io 人如何管理这个主题 【参考方案1】:

您可以使用window objectng-init 将数据从呈现的HTML 传递到Angular:

窗口对象

将您的值分配给“窗口”对象。在 Angular 中注入 $window 服务,该服务引用窗口对象并访问您存储的值。

例子:

在您的 HTML 文件中:

<script>
  window.init =  name: "John Doe" ;
</script>

在控制器中(运行块应该类似地工作):

app.controller('MainCtrl', ['$scope', '$window', function($scope, $window)       
  $scope.user = $window.init;
  ...
]);

Ng-Init

创建一个为您初始化值的函数。

在 HTML 中:

<body ng-controller="MainCtrl" ng-init="initialize(  name: 'Jane Doe'  )">

在控制器中:

$scope.initialize = function( json ) 
  $scope.user2 = json;
;

plnkr

【讨论】:

谢谢@andrbmgi,但我不想污染全局窗口对象,有没有其他方法或者这可能只有一种? 点了。你总是可以做delete $window.init; 来不礼貌;)。我更新了 plnkr。 我包含了另一个与 ng-init 一起使用的选项。这会用另一个函数污染你的 $scope。解决这个问题......你猜对了delete $scope.initialize。 plnkr 现在并排包含两个灵魂。

以上是关于如何从渲染的html向angularjs应用程序添加初始数据的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:AngularJS 渲染模板后如何运行附加代码?

如何从在不同端口上运行的本地 AngularJS 应用程序向本地 Rails 应用程序发出请求?

angularjs如何在视图渲染结束之后,或者render之后执行指令中的link方法呢?

MFC 应用程序:如何向单个文档应用程序添加一组控件?

angularjs学习笔记--$http数据渲染到表格路由依赖注入provider

如何向我的 HTML 表格添加分页?我的表是通过使用 php 的 while 循环动态填充的