搜索

首页  >  问答  >  正文

angular.js - angular 将$scope传入service

app.contronller('xxx', ['$scope', 'service', function($scope, service) {
    $scope.xxx = 'xxxx';

    service.say($scope);
}]);

app.service('xxx', [function() {
    this.say = function($scope) {
    }
}]);

现在维护的代码里好多这样的情形,这是不是错误的用法?感觉用起来很爽,但是代码好混乱

我想大声告诉你我想大声告诉你2774 天前706

全部回复(4)我来回复

  • ringa_lee

    ringa_lee2017-05-15 16:52:23

    这明显是偷懒的做法,造成service的方法的含义非常模糊,你传$scope进去,真正用哪个参数完全体现不出来。
    而且造成service方法对$scope不必要的依赖。

    回复
    0
  • 黄舟

    黄舟2017-05-15 16:52:23

    严格来说,service里面不应该处理非全局性的状态值,尤其是修改。这里就是$scope。换个意思就是说,这里service类似于接口,应该明确函数的参数列表,而不是笼统的参数。

    app.contronller('xxx', ['$scope', 'service', function($scope, service) {
        $scope.xxx = 'xxxx';
        service.say($scope.xxx);
    }]);
    app.service('xxx', [function() {
        this.say = function(word) {
    }}]);
    

    当然类似$location,$rootScope 之类的全局变量,因为不需要通过其他组件传递过来,自身就可以通过注入获取得的到,是可以使用的。

    回复
    0
  • 某草草

    某草草2017-05-15 16:52:23

    去看我的博客 用回调参数传递

    回复
    0
  • 高洛峰

    高洛峰2017-05-15 16:52:23

    其实我测试的时候发现如果你在服务中返回值给控制器中的$scope ,闭包貌似不起作用,然而传$scope进去直接在服务中更新控制器中的$scope, 这样很好用

    回复
    0
  • 取消回复