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

angularjs使用angular.extend将$scope绑定到服务坏/好实践,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我想知道是否使用 angular.extend($scope,MyService); 它是否违反了oop封装原则 闻起来像MyService.call($scope)吗 你能面对变量和函数的冲突吗 这是一种坏的/好的做法吗 通常,根据我的经验,服务被注入控制器,然后从该范围调用。我不会说使用extend对函数和属性进行复制一定不好,但它可能会减轻IoC(控制反转)的某些用途,这正是angular中的注入所基于的 它会破坏oop 我的理解是,您将从这个调用中获得直接在您的作用域上的附加函数和服务

我想知道是否使用

angular.extend($scope,MyService);
它是否违反了oop封装原则

闻起来像MyService.call($scope)吗

你能面对变量和函数的冲突吗

这是一种坏的/好的做法吗

通常,根据我的经验,服务被注入控制器,然后从该范围调用。我不会说使用extend对函数和属性进行复制一定不好,但它可能会减轻IoC(控制反转)的某些用途,这正是angular中的注入所基于的

它会破坏oop

我的理解是,您将从这个调用中获得直接在您的作用域上的附加函数和服务调用。这并没有破坏OOP,因为作用域是一个对象,可以应用函数。如果这些函数+属性在范围上有意义,那么从这个角度来看,这似乎是一件很好的事情

闻起来像MyService.call($scope)吗

正如我在第一段中所说的,我不明白为什么不调用服务,共享数据或将对象引用传递给服务。angular中常见的另一种模式是使用承诺来处理范围中的返回数据。这看起来像:

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
中的数据覆盖。所以从技术上来说,简短的回答是“是的”,你可以面对冲突

底线


因此,在一天结束时,这不是一个糟糕的模式,但可能有更多的常见模式我会首先尝试使用。

首先感谢您的快速长时间回复:)通常我使用该方法是在服务中,只是在控制器中使用了很多道具/方法,因为它不太容易出错。[因此,归根结底,这不是一个糟糕的模式,但我可能会尝试使用更常见的模式来代替。]例如,什么?我想我很罗嗦:)…尝试的模式:(1)延迟承诺。(2)将数据传递到所需的服务中。(3)由于服务是单独的,您可以使用它们来在控制器之间或服务和控制器之间共享数据。再次,“扩展”不是坏主意-您只需要考虑什么对您的特定场景最有效。