찾다

 >  Q&A  >  본문

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) {
    }
}]);

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

我想大声告诉你我想大声告诉你2743일 전681

모든 응답(4)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-05-15 16:52:23

    이것은 분명히 게으른 접근 방식이므로 서비스 메서드의 의미가 매우 모호해집니다. $scope를 전달하면 실제로 어떤 매개 변수가 사용되는지 완전히 불분명해집니다.
    그리고 이로 인해 서비스 메서드가 $scope에 불필요하게 의존하게 됩니다.

    회신하다
    0
  • 黄舟

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

    엄밀히 말하면, 비전역 상태 값은 서비스, 특히 수정에서 처리되어서는 안 됩니다. $scope 입니다. 즉, 여기서의 서비스는 일반적인 매개변수가 아닌 함수의 매개변수 목록이 명확해야 하는 인터페이스와 유사합니다.
    예를 들어

    으아아아

    물론 $location, $rootScope 등의 전역변수는 다른 컴포넌트를 거치지 않아도 되기 때문에 인젝션을 통해 얻을 수 있습니다.

    회신하다
    0
  • 某草草

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

    내 블로그에 가서 콜백 매개변수로 전달하세요

    회신하다
    0
  • 高洛峰

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

    실제로 테스트해 보니 서비스의 값을 컨트롤러의 $scope에 반환하면 클로저가 아무런 효과가 없는 것 같았습니다. 하지만 $scope를 전달하면 컨트롤러의 $scope가 직접 업데이트됩니다.

    아주 잘 작동해요.

    회신하다
    0
  • 취소회신하다