2014-10-16 5 views
0

내 앱에는 클라이언트와 서비스 (약혼)라는 두 개의 필드가 있습니다. 클라이언트에 자동 완성 (이 솔루션을 사용하여 https://stackoverflow.com/a/19547431/223934)을 추가합니다. 추가 단계로 가고 싶습니다. 클라이언트를 선택하면 해당 클라이언트에 대해 사용 가능한 서비스 (계약)에 대한 요청을 보내고 옵션으로보기에 표시됩니다.각도 - 지시어에서 전역 범위 변수로의 패스 값

CSM.controller('myController', ['$scope', '$http', function ($scope, $http) { 
    $scope.availableEngagements = ''; 
.... 

내가 this guide과 결합 방법을 "="적용하는 시도

CSM.directive("autocomplete", ["AutoCompleteService", function (AutoCompleteService) { 
return { 
    restrict: "A", 
    scope: { 
     action: '@', 
     availableEngagements: "=" 
    }, 
    link: function (scope, elem, iAttrs, ctrl, http) { 
     iAttrs.$observe('action', function (actionValue) { 
      elem.autocomplete({ 
       source: function (searchTerm, response, scope) { 
        AutoCompleteService.search(searchTerm.term, actionValue).then(function (autocompleteResults) { 
         response($.map(autocompleteResults, function (autocompleteResult) { 
          return { 
           label: autocompleteResult.name, 
           value: autocompleteResult.id, 
           desc: autocompleteResult.name 
          }; 
         })); 
        }); 
       }, 
       minLength: 1, 
       select: function (event, selectedItem) { 
        // Do something with the selected item, e.g. 
        scope.selectedValue = selectedItem.item.value; 

        scope.$apply(); 
        if (actionValue === "client") { 
         scope.availableEngagements = AutoCompleteService.engagementSearch(selectedItem.item.value); 
         //scope.$apply(); 
        } 

        event.preventDefault(); 
       } 
      }); 
     }); 
    } 
}; 
}]); 

CSM.factory("AutoCompleteService", ['$http', function ($http) { 
    return { 
     search: function (term, action) { 
      return $http.post("autocomplete/" + action + "/", {term: term}).then(function (response) { 
       return response.data; 
      }); 
     }, 
     engagementSearch: function (client) { 
      //Tai sao POST ko duoc ma GET lai duoc? 
      $http.get("autocomplete/engagement/?term=" + client).success(function (data) { 
       return data; 
      }); 
     } 
    }; 
}]); 

지시어. 자동 완성 기능이 제대로 작동하여 앱에서 요청을 성공적으로 보내고 서비스 (계약) 결과를 수신했습니다. 이보기에는 전역 범위로 전달되지 않습니다.

제 코드에 문제가 있음을 알려주십시오. 고맙습니다.

답변

2

먼저주의해야 할 것은 지시문이 부모 범위의 하위 범위 (프로토 타입 상속되지 않음) 인 격리 범위를 만드는 것입니다. 지시문에서 $parent을 사용하여 컨트롤러에 정의 된 범위 개체를 업데이트하십시오.