指令

时间:2015-05-08 09:40:57

标签: javascript angularjs scope ng-options

我想使用" ng-options"在指令中。首先让我给你看一些代码:

fooController.js

        init();
        function init () {
            $scope.randomOptions = [{id: '1', name: 'AAA'},
                                    {id: '2', name: 'BBB'},
                                    {id: '3', name: 'CCC'},
                                    {id: '4', name: 'DDD'},
                                    {id: '5', name: 'EEE'}];
        }

的index.html

<div sort-container ng-model="fooBy" opts="randomOptions"></div>

foobarDirective.js

    foobarDirective = function() {

        return {
            restrict: 'A',
            templateUrl: '/templates/directives/foobarDirective.html',
            transclude: true,
            scope: {
                opts        : '='
            }
        };

    };

foobarDirective.html

<select ng-options="item.id as item.name for item in opts"></select>

<div ng-repeat="item in opts track by $index">
     %(item.id)% - %(item.name)%
</div>

这就是我到目前为止所得到的。但是ng-options仍然没有用,除此之外我还有一些问题可以帮助我进一步理解指令。

a)首先,我尝试通过DIV标记中的opts-attribute传递对象[$ scope.randomOptions],但这并不起作用。我真的不想将对象写入parent.scope,只是将其粘贴为选项。

b)当我使用

opts : '@'
instead of
opts : '='

我可以删除不需要的双向绑定,但我的对象不会以正确的方式传递。是&#39; @&#39;还将我的对象定义为字符串?

感谢您帮助我们:)

1 个答案:

答案 0 :(得分:0)

ng-options仅适用于随附的ng-model(我认为ng-repeat有效吗?)

<select ng-model="selectedItem"
        ng-options="item.id as item.name for item in opts">

双向绑定确实是一种浪费(除非您计划修改指令中的选项)。 "@"是单向字符串绑定。

您可以创建单向绑定的一种方法是使用"&" - 这将创建一个函数,其结果是绑定表达式的结果。因此,虽然使用"&"有点不直观,但这会给你一个单向绑定属性:

<foobar opts="randomOptions"></foobar>

然后,在指令中你会这样使用:

<select ng-model="selectedItem"
        ng-options="item.id as item.name for item in opts()">

(注意最后的功能opts()