2014-04-26 2 views
0

jquery로도 가능합니까? 내 JavaScript 코드는 get 문을 사용하여 데이터를 반환한다는 측면에서 작동하며, 디버깅 후 uploadCategories에 실제로 요청 된 객체가 포함되어 있는지 확인했지만 어떤 이유로 든 select 태그에 렌더링되지 않았습니다. 내가 여기서 무엇을 놓치고 있니?angjjs에 아약스 데이터 적용하기

자바 스크립트 :

var uploadController = function($scope) { 

// upload category array 
$scope.uploadCategories = []; 
$scope.category = ""; 

// get categories 
$.get('/api/Upload/UploadCategories', function(data) { 

    // update array 
    $scope.uploadCategories = []; 
    $.each(data, function(i, item) { 
     $scope.uploadCategories.push({ 
      Id: item.Id, 
      Category: item.Category 
     }); 

     // set active category 
     $scope.category = $scope.uploadCategories[0].Category; 

    }); 
}, "json"); 
}; 

HTML은 :

<form class="text-center" action="/Upload/AdminUpload" method="post" 
    data-ng-controller="uploadController"> 

<fieldset class="form-group" style="display: inline-block;"> 
    <legend>File Info</legend> 

    <!--Upload Category--> 
    <div class="form-group"> 
     <label for="catId">Category</label> 
     <select id="catId" ng-model="category" 
       ng-options="c.Category for c in uploadCategories"></select> 
    </div> 


    <button type="submit" formenctype="multipart/form-data">Upload</button> 
</fieldset> 

+0

각도가있는 jQuery를 사용하는 것이 유혹적이지만. 시간의 90 %는 불필요하며 필요한 것보다 더 많은 코드를 작성하게됩니다. KayKay가 제안한대로 내장 된 모듈을 사용하십시오. 그것 이외의'$ scope.apply (function() {});'는 갈 길입니다. –

답변

1

난 당신이 범주를 설정 한 후 $scope.$digest() 함수를 호출 할 필요가 있다고 생각합니다. 그러면 angularJS가 모델의 뷰를 새로 고칩니다. 콜백 JQuery와에 있기 때문에 그것은, 필요 대신 각 서비스를 사용하는 경우 반면에, 자동으로 다이제스트를 호출하지 않습니다 그래서 각도 :

$http.get('/api/Upload/UploadCategories').success(function(data){..}); 

다이제스트가 암시 적으로 마지막에 호출되어, 새로 고침 자동 그래서.

다이제스트 (그러나 동급)를 호출하는 것보다 더 일반적인 방식은 $scope.apply(function(){});에 콜백 코드를 둘러 쌈으로써 코드를 실행 한 다음 다이제스트를 호출합니다.

그러나 더 좋은 방법은 상자의 각도 $http.get()을 사용하는 것입니다.

+0

그 덕분에 해결되었습니다. 상자에 머무르는 것이 권장 경로이므로 jquery $ .each 함수는 어떨까요? 선호되는 각도 대안이 있습니까? – user1206480

+0

예 'angular.forEach()'함수가 있습니다. 그러나 각도가있는 다른 라이브러리를 사용하는 것은 일반적으로 문제가되지 않습니다. 중요한 것은 함수 호출을 누가 트리거하는지입니다. 모든 각도에서 '$ scope. $ digest()'가 프레임 워크에 의해 결국 호출되기 때문에 모든 것이 자동으로 작동합니다. 그러나 방아쇠가 각도가 아닌 경우 '$ scope. $ digest()'가 호출되지 않으므로 (라이브러리가 각도에 대해 알지 못하므로) 수동으로 호출해야합니다. – kgautron