Angular Directive“TypeError:将循环结构转换为JSON”

时间:2014-03-12 03:51:40

标签: javascript angularjs

我很久以来就遇到过这个问题,但到目前为止我只是忽略了它。这是工作代码:

 <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">&nbsp;</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中执行此操作。希望有人可以帮我解决。它现在使用范围内的性别数组,这不是问题。

0 个答案:

没有答案