2016-08-04 80 views
0

如何将此功能从控制器移动到单独的文件中?Angularjs从控制器移动逻辑

这可能是一个简单的问题,但我试图做到这一点与服务和工厂,但我一直在做错依赖注入或服务或工厂的语法。

这是控制器:

angular.module("myApp", []) 
 
.controller('myAppCtrl', function ($scope, $http) { 
 

 
    (function() { 
 
     //the function to be moved 
 
     //do somthing 
 
    })(); 
 

 
    $scope.data = {}; 
 

 
    $http.//......do something else 
 

 
});

回答

1

plunkr:(在OP的请求代替真实API链路)

HTML:

<div ng-app="myApp"> 
    <div ng-controller="myAppCtrl"> 
    <ul> 
    <li ng-repeat="product in data.products" ng-bind="product.name"></li> 
    </ul> 
    </div> 
</div> 

的Javascript:

angular.module("myApp", []) 
    .constant("dataUrl", "https://some-link.com") 
    .controller('myAppCtrl', function($scope, corsService) { 
    $scope.data = {}; 
    corsService.getData().then(function(data) { 
     $scope.data.products = data; 
    }).catch(function(error) { 
     $scope.data.error = error; 
    }); 
    }); 

angular.module("myApp") 
    .factory('corsService', function($http, dataUrl) { 
    return { 
     getData: getData 
    } 

    function corsRequestEnabler() { 
     //Enable CORS requests 
    }; 

    function getData() { 
     corsRequestEnabler(); 
     return $http.get(dataUrl) 
     .then(function(response) { 
      console.log('Response', response); 
      return response.data; 
     }, function(error) { 
      return error 
     }) 
    } 
    }); 
+0

我只需要将该功能移动到服务或工厂。该功能现在正常工作,但太乱了。 –

+0

@DanRomulus所以将它移入'myAppFactory'而不是'myHttpFn'? –

+0

http://pastie.org/10929423我做错了:Error:[$ injector:unpr]未知提供者:corsServiceProvider < - corsService < - myAppCtrl。所以它一定是我注入服务的方式。 –

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

app.controller('myAppCtrl', function (corsService, $scope, $http, dataUrl )   { 

corsService(); 


app.factory('corsService' ,function($http){ 

var data = {}; 

$http.get(dataUrl) 
.success(function (data) { 
    data.products = data; 
    console.log(data); 
}) 
.error(function (error) { 
data.error = error; 
}); 
return data; 
}); 

}); 
+0

你宣布一个新的模块“对myApp”,而不是使用的getter语法 –

+0

不,这不是我仍在使用不,你不是,该模块已经在创建同一模块 –

+0

文件为控制器。你应该使用'angular.module('myApp')。factory ....' –

相关问题