gpt4 book ai didi

javascript - 如何将结果添加到我的范围 ng-click?

转载 作者:行者123 更新时间:2023-12-03 07:53:14 25 4
gpt4 key购买 nike

这是一段相对简单的代码,它调用服务并返回一些数据。我需要使用数据结果设置 $scope 。有没有一种简单的方法可以将此数据设置到作用域,而无需将作用域绑定(bind)到 then 子句中的函数?

Angular 代码

(function () {
var app = angular.module('reports', []);
var reportService = function($http, $q) {
var service = {};
service.getMenuData = function() {
var deffered = $q.defer();
$http.get('/Report/MenuData').success(function(data) {
deffered.resolve(data);
}).error(function(data) {
deferred.reject("Error getting data");
});
return deffered.promise;
}
return service;
};
reportService.$inject = ['$http', '$q'];
app.factory('reportService', reportService);

var reportMenuController =
function ($scope, $http, reportService) {
$scope.getMenuData = function(e) {
reportService.getMenuData().then(function(data) {
// Need to set the $scope in here
// However, the '$scope' is out of scope
});
}
};
reportMenuController.$inject = ['$scope', '$http', 'reportService'];
app.controller('ReportMenuController', reportMenuController);
})();

标记

<div>
<div ng-controller="ReportMenuController">
<button ng-click="getMenuData()">Load Data</button>
</div>
</div>

最佳答案

从传递给 then() 的函数内设置 $scope 绝对没有问题。该变量可从封闭范围中获取,您可以将菜单数据设置为其字段之一。

顺便说一句:您应该考虑对 http 请求使用 then() 而不是 success() 。代码看起来好多了,因为 then() 返回一个 promise :

service.getMenuData = function() {
return $http.get('/Report/MenuData').then(function(response) {
return response.data;
}, function(response) {
deferred.reject("Error getting data");
});
}

success() 现已弃用。

关于javascript - 如何将结果添加到我的范围 ng-click?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34921214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com