2015-07-12 79 views
12

我試圖從Angular控制器的HTML元素中獲取值。從Angularjs控制器的HTML輸入元素獲取價值

<div ng-app="myApp" ng-controller="myControler"> 
<br /> 

<input id="Text1" type="text" runat="server" value="aValue"/

我的控制器:

var myApp = angular.module('myApp', []); 


myApp.controller("myControler", function ($scope, $document) { 

    var name = angular.element($('#Text1')).val(); 
    console.log(name); 

}); 

但名返回 「未定義」 ......

請,我在做什麼錯?

回答

13

angular.element是jquery $的別名。

你可以訪問該元素是這樣的:angular.element('#Text1').val();

ng-model是要做到這一點,雖然角度的方式。您可以使用NG-INIT

<input id="Text1" type="text" runat="server" ng-model="inputVal" ng-init="inputVal='aVal'"> 

設置從ASP的價值,這可以從控制器使用範圍console.log($scope.inputVal);

的jsfiddle例如訪問:http://jsfiddle.net/n1oppeu2/

+0

當使用ng-model時,不需要value字段 –

+0

True!感謝您指出了這一點。更新我的答案。 –

+0

我爲你增加了一個例子 –

5

爲什麼你需要的角度元素訪問形式元素??

你可以通過綁定模型到它

這樣

<input id="Text1" type="text" runat="server" ng-model="input.field1" /> 

控制器

$scope.input={ 
    field1:'' 
} 
+0

這個元素「Text1」將從代碼隱藏的Asp.net表單中填充。然後,我將使用這是控制器內部的價值。如果我將它綁定到一個範圍變量,控制器重置它的值。 – GCoe

+0

除非你使用控制器來設置ng-model到asp.net給出的內容 –

+0

@GCoe查看我關於從輸入標籤初始化模型的回答 –

0

採用了棱角分明元素選擇#

<input id="Text1" type="text" runat="server" value="aValue" /> 

console.log(angular.element('#Text1').val()); 

設定值或

console.log(angular.element('#Text1')[0].value); 
+1

從控制器訪問DOM是一種不好的做法。 DOM只能在指令內訪問。 – mpolci