[[object Object]] 输入文本 angularjs

Posted

技术标签:

【中文标题】[[object Object]] 输入文本 angularjs【英文标题】:[[object Object]] in input text angularjs 【发布时间】:2015-07-21 03:23:53 【问题描述】:
<form class="form-horizontal" role="form" name="addCreditoBuscar" id="addCreditoBuscar" ng-controller="AddCreditoAppController">
 <div class="form-group">
  <label class="col-sm-2 col-sm-2 control-label">Buscar</label>
   <div class="col-sm-10">
    <input type="text" class="form-control" name="buscar" ng-model="addCreditoBuscar.buscar" ng-required="true" placeholder="Buscar por cedula, nombre o apellido">
    <span class="help-block" ng-show="addCreditoBuscar.buscar.$error.required">Este campo es requerido es requerido.</span>
   </div>
  </div>
</form>

这是我的输入文本代码,但结果是这个 - http://prntscr.com/73otmc

【问题讨论】:

你得到这个是因为addCreditoBuscar.buscar 是一个对象。 Access / process (nested) objects, arrays or JSON的可能重复 把这个放在输入旁边,看看对象在视图中的样子&lt;pre&gt;addCreditoBuscar.buscar | json&lt;/pre&gt; 【参考方案1】:

解决方案很简单。您使用的“表单名称”与要放置的对象相同。将“表单名称”更改为其他名称,例如 name="formAddCreditoBuscar"

<form class="form-horizontal" role="form" name="formAddCreditoBuscar" id="addCreditoBuscar" ng-controller="AddCreditoAppController">

那么你的问题就会消失

【讨论】:

最佳答案在这里。 啊,这是因为愚蠢的复制粘贴错误。改编了[ngModel] 链接,但忘记了名字。【参考方案2】:

您的输入元素将您提供的值强制转换为字符串。您的值是一个对象,因此它将其强制转换为该对象的字符串值 ([[object Object]])。

要解决此问题,您需要访问该对象的 属性

ng-model="addCreditoBuscar.buscar" 是一个对象,因此它将显示为[[object Object]],因为类似Object.prototype.toString() 的东西正在作用于该对象,以便将其强制转换为input 元素中的字符串值。

例如:

var obj = 
    someProp: 'someVal'
;

console.log(''+a); // => "[object Object]"

以上演示了来自对象的字符串强制转换。

如果您想显示该对象的属性,只需使用对象属性访问器(点 .):

addCreditoBuscar.buscar.whateverProperty

因此,每当您的 input 元素将属性强制为一个值时,如果该值是一个字符串,它将显示为一个字符串(这是您的预期输出):

console.log(''+a.someProp); // => "someVal"

【讨论】:

【参考方案3】:

您可以通过在每次更改模型值时显式更改 htmlElement.value 属性来删除显示的值。您可以创建一个指令来处理它。

app.directive('labelField', function () 
    return 
        restrict: 'AE',
        link: function ($scope, element, attrs) 
            $scope.$watch(attrs['ngModel'], function (newValue) 
                if (newValue) 
                    element[0].value = newValue[attrs['labelField']];
                
            )
        
    
)

通过传递字段以在指令中显示来使用它

<input type="text" ng-model="myobject" label-field="myfield">

例如要在$scope.user 中存储像name:"John","email":"a@a.a" 这样的对象,您可以这样使用它:

<input type="text" ng-model="user" label-field="name">

【讨论】:

以上是关于[[object Object]] 输入文本 angularjs的主要内容,如果未能解决你的问题,请参考以下文章

Object.keys映射返回对象Object而不是ReactJS中的文本输入表单中的值

ReactNative问题随笔-undefined is not an object

修复 null is not an object error in react native

unity报错NullReferenceException: Object reference not set to an instance of an object

[ES2017] Iterate over properties of an object with ES2017 Object.entries()

关于Unity3D的错误:NullReferenceException: Object reference not set to an instance of an object 的解答