【发布时间】:2013-05-28 19:39:42
【问题描述】:
我有一个控制器,它显示一个清单,并将选择存储在一个数组中。
我的另一个控制器从第一个控制器的阵列上运行$http.get。
如何设置$watch,以便每当数组更改时,都会发送一个新的 HTTP GET 请求?
我的尝试:http://plnkr.co/edit/EaCbnKrBQdEe4Nhppdfa
// See plnkr for other controller + FooSelection factory + view
function SimpleQueryResCtrl($scope, $http, FooSelection) {
$scope.foo_list_selection = FooSelection;
$scope.$watch('foo_list_selection', function (newValue, oldValue) {
if (newValue !== oldValue)
$http.get('/api/' + $scope.foo_list_selection).success(function (largeLoad) {
$scope.myData = largeLoad;
});
});
}
SimpleQueryResCtrl.$inject = ['$scope', '$http', 'FooSelection'];
【问题讨论】:
-
我认为您的代码是正确的,您是否遇到错误?您还可以检查是否 newValue !== oldValue 以确保您的请求仅在 'foo_list_selection' 真正改变时才被触发。
-
好的,我相信这是我能做的最简单的可运行示例:plnkr。您应该在控制台中看到发出了 HTTP 请求,但此示例中没有发出任何请求。
-
我修复了你的 plunker 中的一些错误,它似乎工作正常:plnkr.co/edit/nnRw4Pu5x9YQyyqWPc4h?p=preview
-
它对我有用,每次我在输入中输入一些内容时,如果被触发到 /api/ + foo_list_selection,就会收到一个 get 请求。
-
谢谢,您的示例确实有效。不幸的是,当我从
input标签切换到我的复选框标签时,它失败了。
标签: javascript angularjs angularjs-scope angularjs-service angularjs-controller