1

autocomplete ディレクティブで http 呼び出しを行うことにより、サーバーからユーザー名を取得する次のコードがあります。

var app2 = angular.module('MyModule', []);

app2.directive('autoComplete', function ($timeout) {
    return function (scope, iElement, iAttrs) {
        iElement.autocomplete({
            source: function () {
                //can't call this like so: scope.$apply('getSource'); I get "$apply already in progress error"
                var names = scope.getSource();
                scope.$apply();
                console.log(names);
                return names;
            },
            async:false,
            minLength: 3,
            select: function () {
                $timeout(function () {
                    iElement.trigger('input');
                }, 0);
            }
        });
    };
});

app2.controller('DefaultCtrl', function($scope, $http) {
    $scope.getSource = function() {
        return $http.get('/AccountRequest/GetMatchingEmployeeNames?matchStr=' + $scope.selected)
            .then(function (data) {
                var names = [];
                for (var i = 0; i < data.length; i++) {
                    names.push(data[i].Name);
                }
                return names;
            });
    };
});

オートコンプリート ソースで promise を使用しようとしています。http メソッドに遅延があり、それ以外の場合は空の配列を取得するためです。どうすればそれを機能させることができるか教えてください。ソースに渡すために promise 関数から名前配列を抽出する方法がわかりません:

4

1 に答える 1