我很久以来就遇到过这个问题,但到目前为止我只是忽略了它。这是工作代码:
<div ng-show="!cs.isEditing">{{cs.refCompound.name}}</div><select ng-show="cs.isEditing" ng-model="cs.refCompound" ng-options="g.name for g in method.refCompoundList"><option value=""></option></select>
现在,我试图将其转换为指令:
app.directive('msSelectCell', function () {
return {
restrict: 'EA',
replace: true,
scope: {
name: '=',
isEditing: '=',
isHidden: '=',
options: '=',
model: '='
},
template:
'<div>' +
' <div ng-hide="!isHidden" style="background-color: lightgrey"> </div>' +
' <div ng-show="!isEditing && !isHidden">{{name}}</div>' +
' <select class="select-input" ng-show="isEditing && !isHidden" ng-model="model" ng-options="g.name || g for g in options"><option value=""></option></select>' +
'</div>'
}
});
该指令适用于所有其他情况,除此之外:
<ms-select-cell name="cs.refCompound.name" is-editing="cs.isEditing" options="method.refCompoundList" model="cs.refCompound" is-hidden="cs.useAsRtRef"/>
正如我所知,这是因为&#39; refCompoundList&#39;是定义的方法的扩展属性:
Object.defineProperty(Method.prototype, 'refCompoundList', {
get: function () {
var list = [];
this.compoundSettings.forEach(function (cs) {
if (cs.useAsRtRef)
list.push(cs.compound);
});
return list;
}
});
所以,我不明白为什么method.refCompound在指令之外正常工作,但是当它只传递给指令时我得到了这个错误?
更新:好的,我试图在here创建一个plunker,但它并没有像我想的那样完全正常工作。我需要使选择选项使用动态填充的扩展属性,我不知道如何在plunker中执行此操作。希望有人可以帮我解决。它现在使用范围内的性别数组,这不是问题。