使用可重用模型并在Angular中需要注入这些模型

问题描述 投票:0回答:3

任何人都知道在单独的JavaScript文件中创建模型的最佳推荐方法,并将这些注入到需要它们的控制器中,而不是在控制器中正常创建模型吗?

这样可以更容易地传递模型,你会确切知道你传递的是什么。

我对使用服务有一些想法,并将它们注入我需要的地方,即控制器。

然后,控制器会将这些服务传递给特定的服务,以进行任何繁重的操作,以保持控制器的美观和轻便

服务是唯一的,推荐的方式吗?或者有更好的替代方式吗?

还将考虑使用第三方库/模块。

angularjs angularjs-scope
3个回答
1
投票

我认为服务是要走的路。它们不仅是可注射的,而且它们也是Singletons - 意味着它们被注射的任何地方,共享相同的实例。

使用$ http服务进行异步调用以检索数据的服务示例:

app.factory('customerService', function($http)  {
   var customers = [];
   $http({ url: 'api/customers/all', method:'GET'}).success(function(data) {
       angular.copy(data, customers);
   });
   return {
      customers: customers
   };
});

在您的控制器或指令中,您可以注入服务并将客户绑定到您的范围:

app.controller('ctrl', function($scope, customerService) {
     $scope.customers = customerService.customers;
});

1
投票

最好的方法是服务,原因有两个。

  • 如果您使用ng-view和路由,则服务不会重新加载,并且您的数据在服务中是安全的
  • 它易于注入控制器
  • 提供控制器之间的双向数据绑定

工作plunker与控制器http://plnkr.co/edit/pt2xwlYqvY3r840tHJ92?p=preview之间的双向数据绑定

注意:如果您的模型中没有点,那么您做错了;)


0
投票

我相信服务是最好的方式。

我已经使用范围继承来放置我的应用程序大部分需要的一些方法,例如我将这些方法附加到我的主模块/ app的.run()方法的路由方法。

如果您需要以这种方式构建应用程序,则可以将模型分离为单独的模块。

© www.soinside.com 2019 - 2024. All rights reserved.