Angular X 可编辑下拉 in-ng-change 不工作
Angular Xeditable drop down e-ng-change is not working
我正在使用 Angular Xeditable api.I 需要根据 drop 的值更改文本字段的值 down.But 这不是 working.Could 你告诉我为什么?谢谢。
Html
<td>
<span editable-select="user.status" e-form="tableform" e-ng-options="s.value as s.text for s in statuses" e-ng-change="setName($data,user)">
{{ showStatus(user) }}
</span>
</td>
js
$scope.setName = function (id, user) {
var selected = [];
if (id) {
selected = $filter('filter')($scope.statuses, { value: id });
}
if (selected.length) {
user.name = selected[0].text;
}
};
生成 html :您可以看到它已按预期更改了名称的文本(status3)。但它不会更新文本框适当地。换句话说,它不会显示在文本 box.Why ?
中
<td>
<!-- editable username (text with validation) -->
<span editable-text="user.name" e-form="tableform" onbeforesave="checkName($data, user.id)" class="ng-scope ng-binding editable editable-hide">
status3
</span><span class="editable-wrap editable-text ng-scope"><div class="editable-controls form-group" ng-class="{'has-error': $error}"><input type="text" class="editable-input form-control ng-pristine ng-valid" ng-model="$data"><div class="editable-error help-block ng-binding" ng-show="$error" ng-bind="$error" style="display: none;"></div></div></span>
</td>
更新:
我试过 this.But 然后它改变了所有行 values.So 我怎样才能只检测到改变的行?
$scope.setName = function (id, user,form) {
var selected = [];
if (id) {
selected = $filter('filter')($scope.statuses, { value: id });
}
if (selected.length) {
for (var i = 0; i < form.$editables.length; i++) {
if (form.$editables[i].name === 'user.name') {
form.$editables[i].scope.$data ="sampath"
}
}
}
};
这里是JsFiddle
我尝试使用您的旧源代码,它对我有用:
if (selected.length) {
user.name = selected[0].text;
}
可能是我想念你的问题。
如果我没理解错的话,您只是想根据状态变化更新文本框(绑定到用户名)上的文本,对吗?
如果是这样,那么您的更新代码太复杂了。只需直接在传递给 setName 函数的用户对象上更新 属性 (就像在您的第一个示例中一样)。它已经绑定到文本框,所以你不必一路走来直接更新文本框。这就是使用 angular 的全部意义所在。您更新示波器上的模型,其余的自动发生。
$scope.setName = function (id, user) {
if (!id || !user) {
// Do something to handle this...
return;
}
var selected = $filter('filter')($scope.statuses, { value: id });
selected = selected.length ? selected[0] : null;
user.name = 'sampath (' + selected.text + ')';
};
这是更新后的 fiddle:
http://jsfiddle.net/NfPcH/14765/
我正在使用 Angular Xeditable api.I 需要根据 drop 的值更改文本字段的值 down.But 这不是 working.Could 你告诉我为什么?谢谢。
Html
<td>
<span editable-select="user.status" e-form="tableform" e-ng-options="s.value as s.text for s in statuses" e-ng-change="setName($data,user)">
{{ showStatus(user) }}
</span>
</td>
js
$scope.setName = function (id, user) {
var selected = [];
if (id) {
selected = $filter('filter')($scope.statuses, { value: id });
}
if (selected.length) {
user.name = selected[0].text;
}
};
生成 html :您可以看到它已按预期更改了名称的文本(status3)。但它不会更新文本框适当地。换句话说,它不会显示在文本 box.Why ?
中<td>
<!-- editable username (text with validation) -->
<span editable-text="user.name" e-form="tableform" onbeforesave="checkName($data, user.id)" class="ng-scope ng-binding editable editable-hide">
status3
</span><span class="editable-wrap editable-text ng-scope"><div class="editable-controls form-group" ng-class="{'has-error': $error}"><input type="text" class="editable-input form-control ng-pristine ng-valid" ng-model="$data"><div class="editable-error help-block ng-binding" ng-show="$error" ng-bind="$error" style="display: none;"></div></div></span>
</td>
更新:
我试过 this.But 然后它改变了所有行 values.So 我怎样才能只检测到改变的行?
$scope.setName = function (id, user,form) {
var selected = [];
if (id) {
selected = $filter('filter')($scope.statuses, { value: id });
}
if (selected.length) {
for (var i = 0; i < form.$editables.length; i++) {
if (form.$editables[i].name === 'user.name') {
form.$editables[i].scope.$data ="sampath"
}
}
}
};
这里是JsFiddle
我尝试使用您的旧源代码,它对我有用:
if (selected.length) {
user.name = selected[0].text;
}
可能是我想念你的问题。
如果我没理解错的话,您只是想根据状态变化更新文本框(绑定到用户名)上的文本,对吗?
如果是这样,那么您的更新代码太复杂了。只需直接在传递给 setName 函数的用户对象上更新 属性 (就像在您的第一个示例中一样)。它已经绑定到文本框,所以你不必一路走来直接更新文本框。这就是使用 angular 的全部意义所在。您更新示波器上的模型,其余的自动发生。
$scope.setName = function (id, user) {
if (!id || !user) {
// Do something to handle this...
return;
}
var selected = $filter('filter')($scope.statuses, { value: id });
selected = selected.length ? selected[0] : null;
user.name = 'sampath (' + selected.text + ')';
};
这是更新后的 fiddle: http://jsfiddle.net/NfPcH/14765/