如何从渲染的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 object
或ng-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方法呢?