初始化$scope
时,从网页传递变量的正确方法是什么?
我目前知道两种可能性:
ng-init
,看起来很糟糕,不推荐(?)还有其他办法吗?
答案 0 :(得分:2)
如果这些变量能够通过ng-init
注入,我假设您已经在Javascript中声明了这些变量。
因此,您应该创建一个服务(constant
)来共享这些变量:
var variablesFromWebPage = ...;
app.constant('initValues', variablesFromWebPage);
使用此服务,您无需将它们添加到app start中的范围,您可以从任何控制器中使用它,只需注入它(function MyCtrl(initValues) {}
)。
Althouhg,如果你确实要求它在范围内,那么根据docs,这是控制器的主要原因之一:
使用控制器:
- 设置范围对象的初始状态。
- 向范围对象添加行为。
只需将此cotroller添加到根节点:
app.controller('InitCtrl', function($rootScope, initValues) {
$rootScope.variable1 = initValue.someVariable;
$rootScope.variable2 = initValue.anotherVariable;
});
答案 1 :(得分:0)
@Cunha:Tnx。
以下是我如何做的更多细节:
在网页中:
<script type="text/javascript">
var variablesFromWebPage = {};
variablesFromWebPage.phoneNumber = '@Model.PhoneNumber';
</script>
在角度应用程序文件中,注册服务:
var module= angular.module('mymodule', ['ngRoute', 'ngAnimate']);
module.factory('variablesFromWebPage', function () {
return variablesFromWebPage
});
然后是控制器:
module.controller('IndexController',
function ($scope, $location, $http, $interval, variablesFromWebPage) {
$scope.phoneNumber = variablesFromWebPage.phoneNumber;
}
);