晚上好,
我使用AngularJS编写一个应用程序,我需要为应用程序与POST请求的服务器的NodeJS发送数据。
我的数据结构像一个json对象,并且它具有数据绑定感谢AngularJS框架。
截至目前,一个函数正在动态地尝试创建用户可能喜欢的一些input
标签内的可能值。一个例子:
<button ng-click="generateFoodAndBeverages(row)>Generate</button>
<input type="text" ng-model="row.service.day.beverage" placeholder="beverage" />
<input type="text" ng-model="row.service.day.food" placeholder="food" />
的两个输入值可以由用户通过在键入值来设定他们想(例如,“可乐”,“汉堡”),但上面的输入标签是一个按钮,可以为用户生成输入值。
生成值的函数从数组中获取它们,然后在函数结尾返回两个可能的值,一个用于饮料,一个用于食物。
当它有两个返回值它改变了两个输入属性值,将它们设置为通过函数产生的两种可能性:
jQuery("#input1").attr("value", generateFoodAndBeverages(row)[0]);
jQuery("#input2").attr("value", generateFoodAndBeverages(row)[1]);
这是不完美的,也不优雅,但它的工作。每次用户请求自动生成食物和饮料时,该函数都会填充并动态更改这两个输入元素的值属性,以便实际设置值并确实存在。即使如此,即使我在屏幕上将它们看作输入字段内的文本,我的POST请求也不会识别ng模型实际发生更改的事实。 ng-model将更改注册到输入字段的value属性的唯一方法是如果用户使用键盘输入内容,则手动更改value属性。另一个例子:
<input type="text" value="generateValue()" ng-model="row.service.info" />
这里的一个根本不改变ng模型的值。
<input type="text" value="User Typed Value" ng-model="row.service.info" />
这另一种代替确实改变了NG-模型价值和它的变化和存在,它被传递到以后可以作为一个POST请求到服务器发送的$范围。
有关为什么输入字段的“自动和动态生成”值在用户类型值没有被ng模型注册时有何想法?
在此先感谢!
[编辑]
显然,问题就来了与ng-model
不改变。我试图通过在输入中应用ng-change
来调试该问题。如果更改是通过javascript完成的,则它不会被注册到ng-model
,并且ng-change
函数不会触发,因为即使我可以清楚地看到javascript为输入标记设置的新值,ng-model
也没有更改。如果我手动更改输入标记的值,则触发ng-change
,并且控制台记录更改。
如果每行都没有那么不同,我可以直接将这些更改应用于ng-model
。
具有NG-模式是这样的:
<input ng-model="row.serviceInfo.DayObject[dayString].food" />
<input ng-model="row.serviceInfo.DayObject[dayString].beverage" />
我如何将能够直接应用这些变化给定的模型是如何动态是NG-模型。作为一个例子,我可以有1000行,每行都有自己的serviceInfo对象。我不知道如何使用动态生成的值为每个行更改模型。
[编辑]
的问题确实有NG-模式不改变。该解决方案包括将更改应用于动态生成的值函数内的每个元素的ng模型。感谢大家的意见。如果有人遇到同样的问题,我会在这里留下这段代码!再次感谢!
let foodEl = angular.element(the row element food input);
let beverageEl = angular.element(the row element beverage input);
$scope.displayedCollection[i].serviceInfo = {
"day" : {
"food" : generatedValuesFood(el, day),
"beverage" : generatedValuesBeverage(el, day)
}
};
foodEl.val($scope.displayedCollection[i].serviceInfo.day.food);
beverageEl.val($scope.displayedCollection[i].serviceInfo.day.beverage);
嗨,尽量简化这里的东西 – digit
您的代码似乎有点复杂,所以很难确保(也许你可以创建一个蹩脚的最低限度?),但解释似乎是因为你正在使用jQuery进行更改。我的理论是,你使用“.attr”,也许你应该使用“.prop”来实际改变财产的价值,但即使如此,我不知道它会起作用。无论如何,我不会为了这个特定的目的混合使用Angular和jQuery,你应该尝试在任何地方使用Angular绑定。 – ssougnez
你说得对,我在jQuery部分使用.attr来更改输入元素的值,并且该值在函数生成时未在ng模型绑定中注册。 – mnemosdev