AngularJS。如何将模型传递给自定义 xeditable 指令? (我试图找到从 ui-select 更新模型的最佳方法)
AngularJS. How to pass model to the custom xeditable directive? (I'm trying to find the best way for updating model from ui-select)
我有指令,允许将 ui.select 与 xeditable 集成。这是我的指令:
var Dashboard = angular.module('Dashboard');
Dashboard.directive('editableUiSelect', ['editableDirectiveFactory', 'editableNgOptionsParser',
function(editableDirectiveFactory, editableNgOptionsParser) {
return editableDirectiveFactory({
directiveName: 'editableUiSelect',
inputTpl: '<span></span>',
scope: {
eNgModel: "="
},
render: function() {
this.parent.render.call(this);
var parsed = editableNgOptionsParser(this.attrs.eNgOptions);
var filter = " | filter: $select.search";
var html = "<ui-select ng-model='eNgModel' theme='bootstrap' style='width: 150px'>"+
"<ui-select-match><span ng-bind='$select.selected.name'></span></ui-select-match>"+
"<ui-select-choices repeat='"+parsed.ngRepeat+filter+"'>"+"<span ng-bind='"+parsed.locals.displayFn+"'></span>"+
"</ui-select-choices></ui-select>";
this.inputEl.removeAttr('ng-model');
this.inputEl.removeAttr('ng-options');
this.inputEl.html(html);
}
});
}]);
我想动态地将模型传递给我的指令,但似乎 xeditable editableDirectiveFactory
不允许我这样做。结果,我无法保存我从 ui-select 中 select 编辑的价值。我能做些什么来解决这个问题?
已解决(请参阅下面的回答),但我的方法只是丑陋的解决方法。我需要有人告诉我解决这个问题的最佳方法。
目前我通过在 ui-select
的 on-select
属性中添加 setModel
方法解决了这个问题。
所以,这样我的 html
变量就变成了:
var html = "<ui-select ng-model='"+this.name+"' theme='bootstrap' style='width: 150px' on-select='setModel($item)'>"+
"<ui-select-match><span ng-bind='$select.selected.name'></span></ui-select-match>"+
"<ui-select-choices repeat='"+parsed.ngRepeat+"'>"+"<span ng-bind='"+parsed.locals.displayFn+"'></span>"+
"</ui-select-choices></ui-select>";
接下来,我只是向每个控制器添加 setModel
方法。 (我的意思是控制器,我在哪个模板中使用了这个指令)。方法示例:
$scope.setModel = function(item) {
if (item.hasOwnProperty('property')) {
$scope.object1 = item;
} else {
$scope.object2 = item;
}
}
最后,我在保存方法中得到了 $scope.objectX
值。
这种方法只是丑陋的解决方法,所以我真的需要有人告诉我最好的方法。
我有指令,允许将 ui.select 与 xeditable 集成。这是我的指令:
var Dashboard = angular.module('Dashboard');
Dashboard.directive('editableUiSelect', ['editableDirectiveFactory', 'editableNgOptionsParser',
function(editableDirectiveFactory, editableNgOptionsParser) {
return editableDirectiveFactory({
directiveName: 'editableUiSelect',
inputTpl: '<span></span>',
scope: {
eNgModel: "="
},
render: function() {
this.parent.render.call(this);
var parsed = editableNgOptionsParser(this.attrs.eNgOptions);
var filter = " | filter: $select.search";
var html = "<ui-select ng-model='eNgModel' theme='bootstrap' style='width: 150px'>"+
"<ui-select-match><span ng-bind='$select.selected.name'></span></ui-select-match>"+
"<ui-select-choices repeat='"+parsed.ngRepeat+filter+"'>"+"<span ng-bind='"+parsed.locals.displayFn+"'></span>"+
"</ui-select-choices></ui-select>";
this.inputEl.removeAttr('ng-model');
this.inputEl.removeAttr('ng-options');
this.inputEl.html(html);
}
});
}]);
我想动态地将模型传递给我的指令,但似乎 xeditable editableDirectiveFactory
不允许我这样做。结果,我无法保存我从 ui-select 中 select 编辑的价值。我能做些什么来解决这个问题?
已解决(请参阅下面的回答),但我的方法只是丑陋的解决方法。我需要有人告诉我解决这个问题的最佳方法。
目前我通过在 ui-select
的 on-select
属性中添加 setModel
方法解决了这个问题。
所以,这样我的 html
变量就变成了:
var html = "<ui-select ng-model='"+this.name+"' theme='bootstrap' style='width: 150px' on-select='setModel($item)'>"+
"<ui-select-match><span ng-bind='$select.selected.name'></span></ui-select-match>"+
"<ui-select-choices repeat='"+parsed.ngRepeat+"'>"+"<span ng-bind='"+parsed.locals.displayFn+"'></span>"+
"</ui-select-choices></ui-select>";
接下来,我只是向每个控制器添加 setModel
方法。 (我的意思是控制器,我在哪个模板中使用了这个指令)。方法示例:
$scope.setModel = function(item) {
if (item.hasOwnProperty('property')) {
$scope.object1 = item;
} else {
$scope.object2 = item;
}
}
最后,我在保存方法中得到了 $scope.objectX
值。
这种方法只是丑陋的解决方法,所以我真的需要有人告诉我最好的方法。