selectMatch에서 각도 ui-bootstrap typeahead 콜백?


92

각진 ui-bootstrap typeahead를 사용하고 있으며 많은 선택 항목을 선택하는 방법으로 사용하고 싶으므로 selectMatch 메서드가 시작될 때 선택한 값을 가져와야하지만 방법을 찾을 수 없습니다. 내 컨트롤러에서

<div class='container-fluid' ng-controller="TypeaheadCtrl">
<pre>Model: {{selected| json}}</pre>
<input type="text" ng-model="selected" typeahead="state for state in states | filter:$viewValue">

선택한 값을 보면 키를 누를 때마다 변경됩니다.

scope.$watch('selected', function(newValue, oldValue) {... });

selectMatch 메서드는 사용자가 Enter 키를 누르거나 목록을 클릭 할 때 호출되는 메서드라는 것을 알았지 만 콜백을받는 방법을 모르겠습니다.

감사 !

답변:


250

이제 더 나은 방법이 있습니다. 새로운 콜백 메소드가 추가되었습니다.

컨트롤러 파일에 다음을 추가하십시오.

 $scope.onSelect = function ($item, $model, $label) {
    $scope.$item = $item;
    $scope.$model = $model;
    $scope.$label = $label;
};

보기에서 다음을 추가하십시오.

 <input type="text"
        ng-model="selected"
        typeahead="state for state in states | filter:$viewValue"
        typeahead-editable="false"
        typeahead-on-select="onSelect($item, $model, $label)"/>

자세한 내용은 자동 완성 사양 을 참조하십시오 (onSelect 검색).

다음 URL이 http://www.techguides.in/how-to-create-autocomplete-using-angularjs-ui/에 도움이되는지 확인하십시오 .

http://www.techguides.in/how-to-customize-autocomplete-to-display-multiple-columns-using-angularjs-ui-2/


2
감사! 매력처럼 작동했습니다. 이것은 아마도 공식적으로 선행 입력 제목 아래 참조 페이지에 문서화되어야한다 : angular-ui.github.io/bootstrap
ariestav

29
아무도 $ item $ model $ label 객체가 실제로 콜백 typeahead-on-select = 'onSelect ($ item, $ model, $ label)'에 있는지 알고 있습니까?
AardVark71 2014-06-25

@Matt, 어쨌든 onSelect 이벤트와 함께 $ http를 사용하여 포스트 백을 할 수 있습니까?
Pratik Gaikwad 2014

15
@ AardVark71 $ item $ model $ label이 세 가지 속성은 각각 다음과 같습니다. 둘 이상의 속성을 가진 객체의 JSON 배열을 바인딩하는 경우 모든 속성과 함께 $ item에서 선택한 항목을 가져옵니다. $ model은 선택한 item.value를 저장할 내장 각도 모델이며 $ lable은 선택 후 텍스트 상자에 표시되는 값을 제공합니다. 간단히 말해서 $ label은 $ model과 같습니다. 이것이 당신의 의심을 명확히하기를 바랍니다.
Pratik Gaikwad 2014

16
@ AardVark71 표현식이 다음과 같으면 설명하기가 더 쉽습니다 state.id as state.name for state in states. 이 경우에는 $item이다 state, $ 모델은 state.id, 그리고 $label이다state.name
Aximili

10

편집 :이 방법은 지금 가장 좋은 방법이 아닙니다. 위의 답변에서 설명한 것처럼 onSelect 콜백을 사용하는 것이 좋습니다.

내가 원하는 것을 어떻게 할 수 있는지 발견했습니다. typeahead-editable 속성이 있고 false로 설정되면 모델의 값이 선택 될 때만 선택된 값이 변경되는 것을 확인했습니다. 따라서 $ watch는 새 값이 선택되면 확인하기 위해 잘 작동합니다.

<input type="text" ng-model="selected" typeahead="state for state in states | filter:$viewValue" typeahead-editable="false">

link: function(scope, elm, attrs){
    scope.$watch('selected', function(newValue, oldValue) {
        if (newValue)
          console.log(oldValue+"->"+newValue);
     });
}

2

다음은 HTML이어야합니다.

 <input id="title" type="text"  ng-model="title"  typeahead="data.enquiry_title for data in titleData | filter:$viewValue | limitTo:8" 
typeahead-on-select='onSelect($item, $model, $label)' />

콜백 함수로 입력 태그 에 typeahead-on-select 를 추가하기 만하면 됩니다.

다음은 컨트롤러 내부로 이동합니다.

$scope.onSelect = function ($item, $model, $label) {
            console.log($item);
            if($item.tid)
                $scope.activeTitleId = $item.tid
        };

$ item 안에는 제안 목록의 메인 배열에서 전달한 전체 객체를 얻을 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.