【问题标题】:[[object Object]] in input text angularjs[[object Object]] 输入文本 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 是一个对象。
  • 把这个放在输入旁边,看看对象在视图中的样子&lt;pre&gt;{{addCreditoBuscar.buscar | json}}&lt;/pre&gt;

标签: angularjs object input angularjs-ng-model object-object-mapping


【解决方案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">
    

    【讨论】:

      猜你喜欢
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      相关资源
      最近更新 更多