问题 业务逻辑在哪里?angularjs?


让我们说点击一个按钮(在视图中),要求是:从服务器获取数据。 我是否对业务逻辑感到困惑

一世) 获取数据和

II) 验证应该在控制器内部或工厂内部(或服务部门)进行

它应该放在工厂还是控制器中? 请帮忙!!


12235
2017-07-11 09:20


起源



答案:


控制器的目的是将数据绑定到您的视图。它们不应包含任何逻辑,只能与您的服务进行通信。

homeModule.controller('homeCtrl',function($scope,Categories){
  $scope.categories = Categories.items;
});

在服务中添加一个函数,用于获取数据并将其存储在自身中:

fetchAll: function(){

  var defer = $q.defer();
  var self = this;

  $http.get(URL})
    .then(function(res){
        self.data = res.data;
        defer.resolve();
    });

  return defer.promise;
},

(请注意,这只是一种可行的方法。没有什么可以阻止您返回数据而不是将其存储在服务上。请根据需要。)

如果可能,您应该考虑在视图初始化之前获取数据。通过这样做,您可以确保在用户获得页面后立即获得必要的数据。

看到 AngularJS应用程序初始化之前的$ http请求?

进一步阅读

https://docs.angularjs.org/guide/services (阅读完整的开发者指南)

http://toddmotto.com/rethinking-angular-js-controllers/

我还推荐这位官员 教程


13
2017-07-11 09:23



如果需要,验证怎么样?是否应该在服务中完成? - ashok_khuman
然后向您的服务添加验证方法或使用angular附带的验证 - Sprottenwels
第二个链接非常有用。非常感谢 - ashok_khuman


答案:


控制器的目的是将数据绑定到您的视图。它们不应包含任何逻辑,只能与您的服务进行通信。

homeModule.controller('homeCtrl',function($scope,Categories){
  $scope.categories = Categories.items;
});

在服务中添加一个函数,用于获取数据并将其存储在自身中:

fetchAll: function(){

  var defer = $q.defer();
  var self = this;

  $http.get(URL})
    .then(function(res){
        self.data = res.data;
        defer.resolve();
    });

  return defer.promise;
},

(请注意,这只是一种可行的方法。没有什么可以阻止您返回数据而不是将其存储在服务上。请根据需要。)

如果可能,您应该考虑在视图初始化之前获取数据。通过这样做,您可以确保在用户获得页面后立即获得必要的数据。

看到 AngularJS应用程序初始化之前的$ http请求?

进一步阅读

https://docs.angularjs.org/guide/services (阅读完整的开发者指南)

http://toddmotto.com/rethinking-angular-js-controllers/

我还推荐这位官员 教程


13
2017-07-11 09:23



如果需要,验证怎么样?是否应该在服务中完成? - ashok_khuman
然后向您的服务添加验证方法或使用angular附带的验证 - Sprottenwels
第二个链接非常有用。非常感谢 - ashok_khuman


您应该将业务逻辑放在服务中。控制器应该只从服务中获取数据并将其绑定到UI。

如果您想了解有关角度最佳实践的更多信息,请在pluralsight.com上推荐此视频:

http://pluralsight.com/training/courses/TableOfContents?courseName=angular-best-practices&highlight=


2
2017-07-11 09:23



Pluralsight需要信用卡。然而,不是每个人都拥有一个。 - Sprottenwels
你有大约10天免费试用。 - Liviu M.
注册需要cc数据 - Sprottenwels