2016-02-29 96 views
0

這聽起來,我一直在努力做一個非常簡單的任務,在這裏它去使用..獲取從輸入值控制器角度JS

我需要一個輸入框的值一用戶將輸入他們的文本,然後在Angular JS中將值傳遞給我的控制器。該值在按下按鈕時傳遞給控制器​​,然後我可以在我的代碼中使用此值,即簡單的控制檯或警報以驗證其正在工作。

但是,我試過各種解決方案,不工作。請在下面的代碼片段:

HTML

<label for="newEmail" class="sr-only">New email address</label> 
<input data-ng-model="updateUser.newEmail" type="text" id="newEmail" 
maxlength="254" pattern="[a-z0-9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,3}$" size="20" 
class="form-control" placeholder="{{user.email}}"> 

<button type="button" class="btn btn-primary btn-md" 
data-ng-click="updateUser.updateProfile()" style="margin: 
3px">Update</button> 

JS

app.controller('adminCtrl', ['$scope', 'Auth', '$state', '$firebaseArray', 
'$timeout', '$firebaseArray', function($scope, Auth, $state, $firebaseArray, 
$timeout) { 

$scope.updateUser = { 
    email: '' 
}; 

$scope.updateProfile = function() { 
    console.log('User clicked register', $scope.updateUser.email); 
}; 

}]); 

請注意,我用各種依賴於控制器,還有待進一步的功能,所有的作品perfectley 。上面的主要問題我試過(和其他各種)要麼返回一個空值或消息'未定義'。

謝謝,

+0

你的'ngModel'與'updateUser.newEmail'綁定,因爲你的控制檯的打印值是'$ scope.updateUser.email'。因此,請將'ngModel'中的ether從'newEmail'更改爲'email'或將'console'從'$ scope.updateUser.email'更改爲'updateUser.newEmail'。 –

+0

我剛剛嘗試將控制檯更改爲updateUser.newEmail,並嘗試更改以下對象:'$ scope.updateUser = { 電子郵件:'' };'到'$ scope.updateUser = { newEmail:'' };'。當我點擊「更新」按鈕時,這兩個選項都不起作用,控制檯上也不會顯示任何內容。 –

+0

我已經嘗試了很多這裏的選項,我可能沒有幫助自己,因爲我沒有說我在這裏使用ng-repeat來填充一個帶有行的表格,那是輸入框被保存的位置。我認爲這可能與問題有關? –

回答

1

您似乎有一些與您的代碼不同的問題。

  1. 在您的控制器定義中,您指定了$firebaseArray兩次。
  2. 你想在控制器上公開哪些變量?目前,您正在公開updateUser這是一個對象,具有單個屬性您正在公開一個名爲updateProfile的函數。
  3. 在你的html你的訪問updateUser.updateProfile()這顯然不會工作。使用您當前的代碼,updateProfile直接位於範圍內。
+0

這最後的工作,謝謝!雖然,現在我又遇到了一些小問題。我會在Plunker中發佈代碼,如果你可以幫忙的話:) –

+0

我可能需要一點時間才能發佈它,這也適用於擁有Firebase數據庫的客戶端,我無法公開它。我現在得到的問題是我在特定的表格單元格中有一個佔位符,該佔位符從將值發送到Firebase的其他輸入框中接受值。當我改變輸入框中的值時,它現在似乎也改變了其他行中的佔位符...... –

+0

聽起來像你有相同的模型綁定到*所有*行 –

0

屬性pattern在這裏引起問題。刪除pattern它會工作。

除非提供的值與模式不匹配,否則不更新模型值。

updateUser.newEmail沒有在任何地方定義。如果您正在訪問updateUser.email,您的型號名稱應該與此相匹配。

updateUser"對象沒有方法updateProfile()",應該直接訪問它。

試試這個:

var saApp = angular.module("saApp", []); 
 
saApp.controller('numberController', function($scope) { 
 
    $scope.updateUser = { 
 
    email: '' 
 
    }; 
 
    $scope.updateProfile = function() { 
 
    console.log('User clicked register', $scope.updateUser.email); 
 
    }; 
 
});
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="saApp" ng-controller="numberController"> 
 
    <label for="newEmail" class="sr-only">New email address</label> 
 
    <input ng-model="updateUser.email" type="text" id="newEmail" maxlength="254" size="20" class="form-control"> 
 
    {{updateUser.email}} 
 
    <button type="button" class="btn btn-primary btn-md" ng-click="updateProfile()" style="margin: 
 
3px">Update</button> 
 
</div>

+0

這適用於此處,我試過了我的版本中的代碼,但我認爲上述的ng-repeat問題可能會導致問題。 –

0

是你想要得到的值用一個ID NEWEMAIL輸入? 那麼你只需要確保你有正確的ng模型是updateUser.newEmail

試試這個: 控制檯。日誌('用戶點擊註冊',$ scope.updateUser.newEmail);