當初始化$scope
時,從網頁傳遞變量的正確方法是什麼?將變量從網頁傳遞到angular.js作用域
我目前知道兩個可能性:
ng-init
,它看起來可怕,不推薦- 使用資源AJAX請求,這需要,而我不希望服務器的其他請求(?)。
還有別的辦法嗎?
當初始化$scope
時,從網頁傳遞變量的正確方法是什麼?將變量從網頁傳遞到angular.js作用域
我目前知道兩個可能性:
ng-init
,它看起來可怕,不推薦還有別的辦法嗎?
如果這些變量能夠通過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;
});
@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;
}
);
我認爲option2,使用ajax – 2013-04-22 11:19:38
這取決於您的應用程序。我認爲這兩個選項都有他們的用例。 – TheHippo 2013-04-22 11:30:41
但是還有其他選擇嗎?因爲我不喜歡:/ – 2013-04-22 12:08:07