1

select要素を拡張するために使用される属性ディレクティブを作成しようとしています。optionこの機能強化の一環として、要素の子にアクセスする必要がありますselect(そのため、関数でそれらにアクセスできるようにしたいと考えていlinkます)。

たとえば、これは非常に基本的なテンプレートです。

<div ng-app="test" ng-controller="TestCtrl">
    <select ng-model="selected" ng-options="i for i in data" enhanced></select>
</div>

非常に基本的なコントローラー:

var t = angular.module("test", []);
t.controller("TestCtrl", function ($scope) {
    $scope.data = [
        "One",
        "Two",
        "Three"
    ];
    $scope.selected = $scope.data[0];
});

そして最後に、非常に基本的なディレクティブ:

t.directive("enhanced", function () {
    return function ($scope, $element) {
        console.log($element.find("option").length); // Always 0
    };
});

その完全な例を含むフィドルを次に示します。

問題は、link関数内でng-optionsディレクティブがまだ実行されておらず、select要素がまだ空であることです。ng-optionsディレクティブが完了するまでディレクティブの実行を延期する方法はありますか? または、これを達成するためのより良い方法はありますか?

4

2 に答える 2

0

オプションは現在、ステートメントでレンダリングされています。したがって、後で呼び出されるため、関数$scope.$watch内のオプションのリストを表示する方法はありません。linkwatch

その前にオプションのリストを内省する唯一の方法は、attr.ngOptions自分自身を解析して、必要なときにリストを取得することです。

于 2013-05-15T15:57:44.480 に答える