angularjs使用angular.extend将$ scope绑定到服务错误/良好实践

时间:2014-03-07 19:47:35

标签: angularjs angularjs-scope

我想知道是否使用

angular.extend($scope,MyService);

它是否打破了oop封装原则?

它的味道是否像MyService.call($ scope)?

你能面对变量和功能冲突吗?

1 个答案:

答案 0 :(得分:2)

  

这是一个坏/好的做法吗?

通常从我的经验中将服务注入控制器,然后从该范围调用。我不会说使用extend来复制函数和属性一定是坏的,但它可能会减轻IoC(控制反转)的一些目的,这就是角度注入的基础。

  

它是否打破了??

我的理解是,您从此调用中获得的是直接在您的范围内执行的附加功能和服务调用。在范围是对象并且应用函数的意义上,这不会破坏OOP。如果这些函数+属性在范围上有意义,那么从这个角度来看,它似乎是一件好事。

  

它的味道是否像MyService.call($ scope)?

正如我在第一段中所述 - 我不明白为什么你不会只是调用服务并共享数据或将对象的引用传递给服务。角度中常见的另一种模式是使用promise来处理范围中的返回数据。看起来像是:

MyService.callFunction(parameters).then(function (data) {
  // process data here. Since this runs in $scope you can also use $scope normally.
  // $scope.$apply() is in progress and will complete when the function returns
});

所有服务都是将数据提供给范围。重点是,我认为有比“延伸”更好的模式。

  

你能面对冲突吗?

在致电angular.extend(a, b);数据中,属性和功能会从b复制到a。如果a上已存在某些内容,则会覆盖b中的数据。从技术上讲,简短的回答是“是”,你可以面对冲突。

底线

所以在一天结束时这不是一个糟糕的模式,但我可能会尝试使用更常见的模式。