首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用动态ng-options创建指令

使用动态ng-options创建指令
EN

Stack Overflow用户
提问于 2015-11-11 06:08:01
回答 1查看 1.1K关注 0票数 0

好的,下面是我的自定义指令:

代码语言:javascript
复制
angular.module('bulwarkWebControls', [])
.directive('dropdownList', [
    function() {
        return {
            scope: {
                label: '@', // optional
                changeCallback: '&',
                options: '=',
                required: "=",
                disabled: "=",
                id: "=",
                name: "=",
                model: "=",
                value: "=",
                display: "="
            },
            restrict: 'E',
            replace: true, // optional 
            templateUrl: 'app/templates/dropDownList.html',
            link: {
                pre: function (scope, element, attr) {
                     scope.expression = "o."+value +" as o."+display+" for o in options";
                }

            }
        };
    }
]);

模板:

代码语言:javascript
复制
<div class="row form-group form-horizontal">
<label data-for="id" class="control-label col-md-3">{{label}}</label>
<div class="col-md-9">
    <select data-id="id" data-name="name" data-ng-disabled="disabled" class="form-control"
            data-ng-model="model"
            data-ng-options="{{expression}}" data-ng-required="required">
        <option></option>
    </select>
</div>

使用该指令的Html代码:

代码语言:javascript
复制
            <div>
            <dropdown-list data-label="Phone(s)" data-id="phoneList" data-name="phoneList"
                           data-disabled="vm.workOrder.Contacted"
                           data-model="vm.workOrder.PhoneNumber_Id" data-value="Id" data-display="Number"
                           data-options="vm.workOrder.CustomerPhoneNumbers" data-required="vm.workOrder.SpokeTo_Id!=5" />
        </div>

我尝试做的基本上是基于传递给指令的"display“和"value”参数,在运行时动态创建ng-options的表达式。您可以在指令中的"pre:“链接函数中看到这一点。现在,我知道这不起作用,因为在执行此函数时,我没有作用域值。但是,我不能在post: linking中做到这一点,因为对于ng-options表达式来说太晚了。有没有办法实现这个功能,或者我在这里完全找错了方向?非常感谢你提前这么做。

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 06:39:55

不要紧。我在模板中使用了以下代码:

代码语言:javascript
复制
<div class="row form-group form-horizontal">
<label data-for="id" class="control-label col-md-3">{{label}}</label>
<div class="col-md-9">
    <select data-id="id" data-name="name" data-ng-disabled="disabled" class="form-control"
            data-ng-model="model"
            data-ng-options="o.{{value}} as o.{{display}} for o in options" data-ng-required="required" compile>
        <option></option>
    </select>
</div>

然后,我采用了我最初放在指令中的pre: linking函数中的任何代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33640584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档