2016-02-29 82 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);