2013-04-22 73 views
1

當初始化$scope時,從網頁傳遞變量的正確方法是什麼?將變量從網頁傳遞到angular.js作用域

我目前知道兩個可能性:

  1. ng-init,它看起來可怕,不推薦
  2. 使用資源AJAX請求,這需要,而我不希望服務器的其他請求(?)。

還有別的辦法嗎?

+0

我認爲option2,使用ajax – 2013-04-22 11:19:38

+0

這取決於您的應用程序。我認爲這兩個選項都有他們的用例。 – TheHippo 2013-04-22 11:30:41

+0

但是還有其他選擇嗎?因爲我不喜歡:/ – 2013-04-22 12:08:07

回答

2

如果這些變量能夠通過ng-init注入,我假設你有他們在Javascript中聲明。

所以,你應該建立一個服務(constant)來共享這些變量:

var variablesFromWebPage = ...; 
app.constant('initValues', variablesFromWebPage); 

有了這項服務,你並不需要將它們添加到範圍,應用開始,你可以用它任何控制器,只需注入它(function MyCtrl(initValues) {})。

Althouhg,如果你要求它在範圍內,那麼這是意味着什麼控制器的主要理由之一,因爲每docs

使用控制器:

  • 設置作用域對象的初始狀態。
  • 將行爲添加到範圍對象。

就在這個cotroller添加到您的根節點:

app.controller('InitCtrl', function($rootScope, initValues) { 
    $rootScope.variable1 = initValue.someVariable; 
    $rootScope.variable2 = initValue.anotherVariable; 
}); 
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; 
    } 
);