[[object Object]] 输入文本 angularjs
[[object Object]] in input text angularjs
<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
您的输入元素正在将您提供的值强制转换为字符串。您的值是一个对象,因此它将它强制转换为该对象的字符串值([[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"
您可以通过在每次更改模型值时显式更改 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">
解决方法很简单。您使用的 "form name" 与您要放置的对象相同。将 "Form name" 更改为一个不同的名称="formAddCreditoBuscar"
<form class="form-horizontal" role="form" name="formAddCreditoBuscar" id="addCreditoBuscar" ng-controller="AddCreditoAppController">
那么你的问题就会消失
<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
您的输入元素正在将您提供的值强制转换为字符串。您的值是一个对象,因此它将它强制转换为该对象的字符串值([[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"
您可以通过在每次更改模型值时显式更改 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">
解决方法很简单。您使用的 "form name" 与您要放置的对象相同。将 "Form name" 更改为一个不同的名称="formAddCreditoBuscar"
<form class="form-horizontal" role="form" name="formAddCreditoBuscar" id="addCreditoBuscar" ng-controller="AddCreditoAppController">
那么你的问题就会消失