在Angular中获取text-field的值

时间:2015-11-09 08:09:50

标签: javascript angularjs

我的html中有一个文本字段表单,我希望将其提取到控制器中。

目前它总是返回“未定义”

enter image description here

HTML:

<center>
    <button ng-click="RequestSubmit()" class="button button-assertive">
    Submit Request!
    </button>
</center>

<label class="item item-input">
<span class="input-label">Remarks</span>
 <input type="text" ng-model="remarkstext">
</label>

控制器:

.controller('ctrl', function($http, $scope, dataFactory) {
$scope.RequestSubmit = function($scope){

var t = $scope.remarkstext;
console.log("remarks: "+t);

删除函数()中的“$ scope”不起作用。可能是什么问题?

5 个答案:

答案 0 :(得分:2)

试试这个plunker

<强> HTML:

<div>
<input type="text" ng-model="remarkstext">
 <button ng-click="RequestSubmit()" class="button button-assertive">
    Submit Request!
    </button>
</div>

<强> JS:

$scope.remarkstext='';
$scope.RequestSubmit = function(){
console.log($scope.remarkstext);
}

答案 1 :(得分:1)

使用此代码::

.controller('ctrl', function($http, $scope, dataFactory) {
    $scope.RequestSubmit = function(){

    var t = $scope.remarkstext;
    console.log("remarks: "+t);

答案 2 :(得分:1)

正如@weirdpanda在评论中所说,您必须从$scope函数中删除RequestSubmit。请注意,此函数需要一个参数,并且您在没有任何人的情况下调用它。因此,在RequestSubmit函数中,$scope未定义。

关于你的控制器的定义,它并不坏,但考虑到如果你缩小你的代码它将无法工作,你应该这样定义:

.controller('ctrl', ['$http', '$scope', 'dataFactory', 'StoreService', function($http, $scope, dataFactory, StoreService) {
    ...
}]);

答案 3 :(得分:1)

@jjimenez非常正确地提到你正在使用一个函数,它需要一个参数而不传递任何参数。这使得AngularJS的内部混淆,因为它可能将其视为一种特殊的扩展函数。

从功能中删除$scope;此外,一个非常常见的编码标准是(它实际上使代码更易读,更容易使用):

.controller( 'ctrl', [ '$scope', '$http', 'dataFactory', function( $scope, 
                                                                   $http, 
                                                                   dataFactory ) {

    $scope.RequestSubmit = function() {
        console.log( "Remarks: " + $scope.remarkstext );
    };

    // ... rest of the logic

}] );

在缩小之后,旧代码将不起作用,因为当UglifyJS(或等效物)缩小它时,它会将保留变量$scope等重命名为e {{1}或者其他什么,Angular无法解决;当你使用a(我忘了它的具体名称)时,angular知道要注入什么,只有名字已经改变。

出现问题,有一件事可能是你在填写文本之前试图点击按钮;正如您可以阅读我的一个答案here,我已经解释了array notation的工作原理。给那个读,然后检查!

如果可能,您能否告诉我们您如何定义控制器;在HTML的上下文中。

答案 4 :(得分:0)

  

如果你不想使用$ scope.remarkstext,那么传递remarkstext in   NG-点击。

     

注意:如果要访问控制器中的模型值,则必须使用$ scope.remarkstext。

     

您直接使用 remarkstext ,因此会出错   未定义。

如果你想要参数

的值,请使用这样的方法

<center>
    <button ng-click="RequestSubmit(remarkstext)" class="button button-assertive">
    Submit Request!
    </button>
</center>

<label class="item item-input">
<span class="input-label">Remarks</span>
 <input type="text" ng-model="remarkstext">
</label>

的 的

$scope.RequestSubmit = function(remarkstext){

var t = remarkstext;
console.log("remarks: "+t);
}

你的错误

$scope.RequestSubmit = function($scope){

var t = $scope.remarkstext;
console.log("remarks: "+t);
}

我不明白你在函数参数中使用$ scope的原因 您可以直接在函数内部使用$ scope.remarkstext。而remarkstext在 ng-model 中,因此可以在 $ scope ng-inspector 中查看范围树控制台。