如何从angularjs控制器访问$ resource?

时间:2015-03-11 06:54:56

标签: javascript ruby-on-rails angularjs

我正在运行带有角度的Rails 4应用程序。当我运行以下代码时,我得到的错误(在Firefox控制台中) $ resource未定义

1)$ resource不是全局变量吗?我该如何访问它?
2)如何从html表单的提交事件中的控制器正确调用API端点“/ admin / update_something”?

今天是我学习angularjs的第二天,所以我正在努力学习惯例。

的HTML / HAML:

%section{"ng-app"=>"bctApp", "ng-controller" => "bctCtr"}
  %form{:name => "bctForm", "ng-submit" => "bctSubmit($event)"}
    %table
      %thead
        %tr
          %th bct ID 
      %tbody
        %tr 
          %td
            %input{:type => "button", :value => "Add bct ID", "ng-click"=>"addbctIdField()"}
            %input{:type => "submit", :value => "Save Changes"}
        %tr{"ng-repeat" => "bct_id in bct_ids track by $index"}  
          %td 
            %input{:type =>"text", :value=>"{{ bct_id }}" }
            %input{:type =>"button", :value=>"Remove", "ng-click"=>"removebctIdField($index)"}

angularjs控制器:

function Admin($resource) {
    return $resource('/admin/update_something', 
      { },
      { update_list: {
          method: "POST",
          isArray: true 
        }
      }
   );
  }

  function bctCtr($scope) {
    $scope.bct_ids = gon.bct_ids;
    $scope.addbctIdField = function() {
      $scope.bct_ids.unshift($scope.bct_id_val);
    }
    $scope.removebctIdField = function(index) {
      $scope.bct_ids.splice(index, 1);
    }
    $scope.bctSubmit = function() {
      var bctUpdate = new Admin();
      bctUpdate.update_list({}, $scope.bct_ids);

    }

  }

  var bctApp = angular.module('bctApp', ['ngResource']);
  bctApp.controller('bctCtr', bctCtr);
  bctApp.factory('Admin', ['$resource', Admin]);

})(angular);

3 个答案:

答案 0 :(得分:0)

除了$ scope之外,将Admin作为控制器声明中的参数传递。 然后当你使用它时,你可以直接调用Admin.update ...你不必使用新的Admin()(并且不应该使用IMO)。 别忘了把它注入下面。

问题是你正在使用Admin而不是要求角度因此无法注入资源。

答案 1 :(得分:-1)

请检查您是否已将ngResource模块作为依赖项注入您的应用程序,即

var app=angular.module("myApp", ["ngResource"]);

答案 2 :(得分:-1)

我不确定您收到$resource is not defined错误的原因。我创造了一个plunkr,它的工作原理!

你能让我知道它说的代码行吗?

这是工作Plnkr

function Admin($resource) { 
  return $resource('/admin/update_something', 
    { },
    { update_list: 
      {
        method: "POST",
        isArray: true 
      }
    }
 );
}

function bctCtr($scope, Admin) {
  console.log(Admin)
}

var bctApp = angular.module('bctApp', ['ngResource']);
bctApp.controller('bctCtr', bctCtr);
bctApp.factory('Admin', ['$resource', Admin]);