2015-03-31 49 views
1

HTML:我可以在html中啓動一個Angular ngModel,然後在控制器中使用它的值嗎?

<div ng-controller="MyController"> 
<form> 
<!-- one way to do it --> 
<input ng-model="var1" value="1"></input> 
<!-- another way, not approved per angular documentation outside of ngRepeat --> 
<input ng-model="var2" ng-init="var2=2"></input> 
</form> 
</div> 

JS:

angular.module('myApp', []); 
angular.module('myApp') 
    .controller('MyController', ['$scope', function ($scope) { 
    console.log("value of var1 is " + $scope.var1); 
    console.log("value of var2 is " + $scope.var2); 
    $scope.var1 = 3; 
    $scope.var2 = 4; 
}]); 

View this in jsbin

結果:

value of var1 is undefined 
value of var2 is undefined 
[setting values to 3 and 4 displays fine in inputs] 

因此,它似乎是控制器代碼輸入NG-模型之前運行正在評估參數。考慮到控制器早於輸入標籤發佈,這是有道理的。

問題:

是否有任何方式讓控制器邏輯讀取和尊重VAR1和VAR2的初始值?

回答

2

您不能混用Angular的ng-model和常規HTML value屬性。

如果要初始化模型,請在控制器中進行初始化(或使用ng-init,但不推薦使用)。並從您的HTML中刪除value

$scope.var1 = 3; 
$scope.var2 = 4; 

而且,在使控制器首先被讀取,所以如果你想顯示你需要從$watch爲它ng-initng-init評價:它不會在那裏執行你的控制器的第一次。

+0

嗯,所以如果我想在服務器端生成html和js時初始化模型,我必須以某種方式在js中執行此操作?像做一個返回一些預生成的json的服務? – 2015-03-31 21:19:18

+0

我可以把價值在一個典型的數據屬性,並閱讀它使用jquery/jqlite? – 2015-03-31 21:20:07

+1

Angular的整個想法是你不生成HTML服務器端。您可以使用服務器來構建「模型」(在控制器中)並讓HTML根據此模型進行渲染。這是爲了更好地分離問題:服務器只提供信息並且沒有顯示的概念。 – floribon 2015-03-31 21:22:05

相關問題