这是否可以用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>
答案 0 :(得分:1)
我认为您需要在设置类别后调用$scope.$digest()
函数。这使得angularJS从模型中刷新视图。这是需要的,因为你的回调是在JQuery中,所以angular不会自动调用摘要,而如果你使用角度服务:
$http.get('/api/Upload/UploadCategories').success(function(data){..});
最后会隐式调用摘要,因此刷新是自动的。
比调用摘要(但等效)更常规的方法是在$scope.apply(function(){});
中包围你的回调代码,这会执行你的代码,然后调用摘要。
但更好的方法是使用角度$http.get()
,因为它来自盒子。