将ajax数据应用于angularjs选择

时间:2014-04-26 01:20:49

标签: jquery angularjs

这是否可以用jquery?我的javascript代码在使用get语句返回数据方面起作用,并且在调试之后我验证了uploadCategories确实包含了所请求的对象,但无论出于何种原因它们都没有呈现给select标记。我在这里缺少什么?

使用Javascript:

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>

1 个答案:

答案 0 :(得分:1)

我认为您需要在设置类别后调用$scope.$digest()函数。这使得angularJS从模型中刷新视图。这是需要的,因为你的回调是在JQuery中,所以angular不会自动调用摘要,而如果你使用角度服务:

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

最后会隐式调用摘要,因此刷新是自动的。

比调用摘要(但等效)更常规的方法是在$scope.apply(function(){});中包围你的回调代码,这会执行你的代码,然后调用摘要。

但更好的方法是使用角度$http.get(),因为它来自盒子。