2016-08-05 32 views
2

在我的HTML頁面中,我設置的輸入文本框值不是通過鍵入,而是通過JavaScript,然後當我使用AngularJS內部獲取該值時使用範圍控制器,那麼它顯示未定義....輸入文本框的ng-model值在angularjs控制器中未定義,當通過javascript動態設置時

下面是我的代碼: - >

<!DOCTYPE html> 
<html lang="en"> 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
<body> 

<div ng-app="myApp" ng-controller="formCtrl"> 
    <form id="someForm" name="someForm"> 
    First Name: <input type="text" id="fname" ng-model="user.firstname" ng-model-options="{updateOn: 'change'}" /> 
    Last Name: <input type="text" id="lname" ng-model="user.lastname" ng-model-options="{updateOn: 'change'}" /> 
    <input id="getUser" type="submit" ng-click="getUserName(user)" value="Get User" /> 
    <button ng-click="resetForm(user)">RESET</button> 
    </form> 
</div> 
<script> 
$('#getUser').on('click', function(){ 
    //$("getUser").on('click', function(){ 
    //alert("First Name "+$("#fname").val()); 
    $("#lname").val($("#fname").val()); 
    alert("Last Name set to "+$("#lname").val()); 
// }); 
}); 

</script> 
<script> 
//angular.element(document).ready(function() {}); 
var app = angular.module('myApp', []); 
app.controller('formCtrl', function($scope) { 

$scope.getUserName = function(user) 
{ 

    alert("Last Name in Angular Controller: "+$scope.user.lastname)  

} 
$scope.resetForm = function(user) { 
     //Even when you use form = {} it does not work 
     angular.copy({},user); 
    } 
}); 

</script> 

</body> 
</html> 

點擊獲取用戶按鈕後,第一姓氏字段的值是通過JQuery的設置,則AngularJS控制器在ng-model中未定義的值被調用。我無法理解這一點。這種類型的場景的解決方案或變通方法是什麼,其中輸入文本字段值是通過JavaScript或JQuery動態設置的,並使用AngularJS模型和控制器獲取和使用。

+0

你試試我的答案? –

+0

是的,但仍然沒有定義。看到我下面的評論.. – srikit2014

回答

2

看起來你在NG-模型= 「user.lasttname」 一個錯字

<!DOCTYPE html> 
<html lang="en"> 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
<body> 

<div ng-app="myApp" ng-controller="formCtrl"> 
    <form id="someForm" name="someForm"> 
    First Name: <input type="text" id="fname" ng-model="user.firstname" ng-model-options="{updateOn: 'change'}" /> 
    Last Name: <input type="text" id="lname" ng-model="user.lastname" ng-model-options="{updateOn: 'change blur'}" /> 
    <input id="getUser" type="button" ng-click="getUserName(user)" value="Get User" /> 
    <input id="getUser2" type="button" ng-click="getUserName(user)" value="Get User" /> 
    <button ng-click="resetForm(user)">RESET</button> 
    </form> 
</div> 
<script> 
$('#getUser').on('click', function(){ 
    var element = angular.element($('#someForm')); 
    element.scope().user.lastname = $("#fname").val(); 
}); 

</script> 
<script> 
//angular.element(document).ready(function() {}); 
var app = angular.module('myApp', []); 
app.controller('formCtrl', function($scope) { 
$scope.user = {}; 

$scope.getUserName = function() 
{ 
    console.log("User: "+ JSON.stringify($scope.user)); 
    alert("Last Name in Angular Controller: "+$scope.user.lastname)  

} 
$scope.resetForm = function(user) { 
     //Even when you use form = {} it does not work 
//  angular.copy({},user); 
    } 
}); 

</script> 

</body> 
</html> 
+0

事件後糾正錯字,我得到undefined $ scope.user.lastname – srikit2014

+0

當然。所以,你可以通過幾種不同的方式來實現這一點。我將使用 – Wake

+0

示例修改上面的代碼,感謝您的代碼,它的工作原理,但實際上上面寫的第一個腳本標記下的JQuery代碼是一個示例。在實際的情況下,這個動態改變文本框的JQuery代碼並不適用於我們,即與其他一些客戶端(第三方),所以我們這邊有任何方式(即在我們的AngularJS代碼中),在那裏我們可以獲取改變的文本框值。 – srikit2014

0

當然!!!如果你想要綁定(HTML < - > JavaScript),你必須遵守Angular的規則。你需要做的是更新爲輸入框定義的ng模型。所以,請添加到您的輸入框中:ng-model="blabla"並在您的JavaScript中:$scope.blabla = <value>

更正:您在輸入中確實有ng模型,但仍錯過javascript代碼中的賦值。

0

在angularjs代碼添加這樣的: -

<script> 
//angular.element(document).ready(function() {}); 
var app = angular.module('myApp', []); 
app.controller('formCtrl', function($scope) { 
    $scope.user = {}; // Initiate this 
    $scope.getUserName = function(user) 
    { 
     alert("Last Name in Angular Controller: "+$scope.user.lastname)  
    } 
}); 

+0

即使添加上面,它顯示未定義的$ scope.user.lastname – srikit2014