没有调用Angular的工厂方法

时间:2016-09-22 00:56:36

标签: angularjs angular-resource angular-services

在我的services.js文件中,我有以下$resource来连接我的RestAPI ...

app.factory('Profile', function ($resource) {
    console.log("here");
    var Bear = $resource('http://192.168.0.11:3000/api/bears/:id', {id:'@id'});
    Bear.save({name:"Yogi"});
});

现在,我正在尝试测试它是否正常工作,但永远不会达到console.log("here");

这是我的app.js文件,其中包含我的控制器...

var app = angular.module('starter',
      [
      'ionic',
      'ngResource'
      ]
   );

app.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
    if (window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);

    }
    if (window.StatusBar) {
       // org.apache.cordova.statusbar required
      StatusBar.styleDefault();
    }
   });
 });

正如您所看到的,我包含了ngResource,但仍未调用工厂方法。我做错了什么?

1 个答案:

答案 0 :(得分:2)

正如@Phil所说,你的工厂只是在那里无所事事,因为:

  1. 不会将其注入任何控制器或服务中。 (或者在你的情况下是app.run块)
  2. 解决方案:将其注入$ ionicPlatform

    旁边的app.run块
    1. 应使用名为saveBear的方法从app.run块调用Profile工厂。
    2. 解决方案:将services.js中的代码更改为:

      app.factory('Profile', function ($resource) {
          var saveBear = function(){
            console.log("here");
            var Bear = $resource('http://192.168.0.11:3000/api/bears/:id',{id:'@id'});
            Bear.save({name:"Yogi"});
          }
      
        return {
          saveBear: saveBear
        }
      
      });
      

      然后使用语句

      调用运行块中的方法

      Profile.saveBear();