将 devextreme 文本值绑定到 angular 模型(按下键时)
Bind devextreme text value to angular model (on keydown)
我刚刚开始试用 DevExtreme HTML 组件。目前,我正在尝试使用 AngularJS 和 DevExtreme 获得一个简单的搜索表单。
我想按回车键提交搜索表单。问题是如果我跳出字段(大概是 onValueChanged 事件),小部件似乎只更新 angular 模型。
在下面的代码中,我观察到 searchData.q
的值仅在跳出字段时发生变化。因此,当在 onKeyChange
事件中提交表单时,它使用的是之前的文本值。文本框以这种方式运行似乎有点违反直觉,绝对 base angular 不能像这样使用 ng-model...
有谁知道如何修复它以便正确绑定值?
<form id="HeaderSearchForm" ng-submit="search">
<div dx-form="searchFormOptions"></div>
</form>
<pre>
{{searchData | json}}
</pre>
在 angular 控制器中:
app.controller('HeaderCtrl', ['$scope', 'authorityService', function ($scope, authorityService) {
var execSearch, searchData = {}, searchFormOptions;
$scope.searchFormOptions = {
formData: searchData,
items: [{
dataField: 'q',
label: {
text: 'Search'
},
bindingOptions: {
"formData.q": "searchData.q"
},
editorOptions: {
mode: 'search',
placeholder: 'Enter a search query',
onKeyDown: function(e){
var keyCode = e.jQueryEvent.which;
if (keyCode === 13){
search();
}
}
}
}]
};
search = function(){
alert('searching for ' + searchData.q);
};
$scope.searchData = searchData;
$scope.search = search;
}]);
valueChangeEvent 选项对您的情况很有帮助。将其更改为 keydown
:
editorOptions: {
mode: 'search',
placeholder: 'Enter a search query',
onKeyDown: function(e) {
//...
},
valueChangeEvent: "keydown"
}
也请参阅此 sample。
我刚刚开始试用 DevExtreme HTML 组件。目前,我正在尝试使用 AngularJS 和 DevExtreme 获得一个简单的搜索表单。
我想按回车键提交搜索表单。问题是如果我跳出字段(大概是 onValueChanged 事件),小部件似乎只更新 angular 模型。
在下面的代码中,我观察到 searchData.q
的值仅在跳出字段时发生变化。因此,当在 onKeyChange
事件中提交表单时,它使用的是之前的文本值。文本框以这种方式运行似乎有点违反直觉,绝对 base angular 不能像这样使用 ng-model...
有谁知道如何修复它以便正确绑定值?
<form id="HeaderSearchForm" ng-submit="search">
<div dx-form="searchFormOptions"></div>
</form>
<pre>
{{searchData | json}}
</pre>
在 angular 控制器中:
app.controller('HeaderCtrl', ['$scope', 'authorityService', function ($scope, authorityService) {
var execSearch, searchData = {}, searchFormOptions;
$scope.searchFormOptions = {
formData: searchData,
items: [{
dataField: 'q',
label: {
text: 'Search'
},
bindingOptions: {
"formData.q": "searchData.q"
},
editorOptions: {
mode: 'search',
placeholder: 'Enter a search query',
onKeyDown: function(e){
var keyCode = e.jQueryEvent.which;
if (keyCode === 13){
search();
}
}
}
}]
};
search = function(){
alert('searching for ' + searchData.q);
};
$scope.searchData = searchData;
$scope.search = search;
}]);
valueChangeEvent 选项对您的情况很有帮助。将其更改为 keydown
:
editorOptions: {
mode: 'search',
placeholder: 'Enter a search query',
onKeyDown: function(e) {
//...
},
valueChangeEvent: "keydown"
}
也请参阅此 sample。