javascript - 如何将 Controller 变量作为 AngularJS $resource 请求的参数传递?

标签 javascript angularjs angular-services ngresource angularjs-ng-resource

我是 angularjs 的新手,我认为这应该是一件简单的事情,但我无法完成它。基本上我需要的是从服务获取变量并将其作为 GET 请求中的参数传递。为此,我使用 ngResource 模块。

我从服务获得的变量可能会发生变化,同样,我需要的是更改发出请求的 url 以及将呈现并显示在 View 中的数据。

这就是为什么我需要获取该变量,将其传递给 Controller ​​并使用服务中定义的参数在此 Controller 中发出 $resource 请求。

这是我的 Controller :

.controller('LicoresController',['$scope','LicoresService','CategoriaService',function($scope,LicoresService,CategoriaService){ 
    $scope.licores=[];        
    $scope.pk=CategoriaService.getPk();
    console.log($scope.pk);
    LicoresService.query({disponibles:$scope.pk},function(data){
        $scope.licores=data;
        console.log(data);
        },function(error){
           console.log(error);
    });
}]);

Licores服务

.factory('LicoresService',['$resource',function($resource){

    return $resource('http://192.168.0.16:8000/api/productos/',{licorera:2},{isArray:true});         
}]);

还有CategoriaService(从这个中,我得到了需要作为请求参数传递的变量)

.factory('CategoriaService',function(){
    var pk=0;

    function getPk(){
        return pk;
    }

    function setPk(newpk){
        pk=newpk;
    }

    return{
      setPk:setPk,
      getPk:getPk,
    };

});

在 View 中,我使用 ng-repeat 指令迭代 $scope.licores 数组。

<li ng-repeat="licor in licores"> 
  <img src="{{licor.imagen}}"/>     
  <table align="center"> 
    <tr><td >{{licor.marca|uppercase}}</td></tr>
    <tr><td >Tamaño</td><td >{{licor.tamano}}</td></tr>
    <tr>
        <td>Precio<br/>
            <span >$ {{licor.precio}}</span>
        </td>
    </tr>                   
  </table>
</li>  

问题似乎是 LicoresService.query() 函数没有更新 View 。所以我认为每次 $scope.pk 变量更改其值时我都需要调用该函数。但我不知道该怎么做。

最佳答案

您可以创建一个 $scope.watch 来包装您的资源调用。 watch 接受带有旧值和新值参数的回调函数,它将轮询每个 $digest 上的范围值,并且您可以根据更改有条件地调用 $resource:

$scope.watch('pk', function(newValue, oldValue) {

  // check if the pk has changed
  if ( newValue !== oldValue ) {

    // query your api if pk has changed
    LicoresService.query({disponibles:$scope.pk},function(data){
      $scope.licores=data;
      console.log(data);
    },function(error){
      console.log(error);
    });

  }

});

关于javascript - 如何将 Controller 变量作为 AngularJS $resource 请求的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117743/

相关文章:

javascript - 定位和编辑新创建的行?

ajax 后 javascript 函数停止工作

javascript - 如何从显示原型(prototype)访问我的实例 'this'?

javascript - Angular JS ng-change 事件没有启动

javascript - 错误消息 - 在使用 Angular 服务原型(prototype)时不是一个函数

javascript - 如何使用 Karma 和 Jasmine 在 Angular 服务中测试 'private' 函数

javascript - 在服务调用后创建一个简单的 Angular promise

javascript - 计算 ng-repeat 输入字段中的总和 AngularJS

javascript - Netscape 企业服务器和服务器端 JavaScript (SSJS) 与 Node.js

javascript - Angular-Leaflet-Directive - map 在技术上正在渲染,但其图 block 均未出现的问题。