将变量传递给网页中的angular.js范围

时间:2013-04-22 11:17:39

标签: angularjs

初始化$scope时,从网页传递变量的正确方法是什么?

我目前知道两种可能性:

  1. ng-init,看起来很糟糕,不推荐(?)
  2. 使用资源的AJAX请求,这需要向服务器提出我不想要的额外请求。
  3. 还有其他办法吗?

2 个答案:

答案 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;
    }
);