app.contronller('xxx', ['$scope', 'service', function($scope, service) {
$scope.xxx = 'xxxx';
service.say($scope);
}]);
app.service('xxx', [function() {
this.say = function($scope) {
}
}]);
现在维护的代码里好多这样的情形,这是不是错误的用法?感觉用起来很爽,但是代码好混乱
ringa_lee2017-05-15 16:52:23
이것은 분명히 게으른 접근 방식이므로 서비스 메서드의 의미가 매우 모호해집니다. $scope를 전달하면 실제로 어떤 매개 변수가 사용되는지 완전히 불분명해집니다.
그리고 이로 인해 서비스 메서드가 $scope에 불필요하게 의존하게 됩니다.
黄舟2017-05-15 16:52:23
엄밀히 말하면, 비전역 상태 값은 서비스, 특히 수정에서 처리되어서는 안 됩니다. $scope 입니다. 즉, 여기서의 서비스는 일반적인 매개변수가 아닌 함수의 매개변수 목록이 명확해야 하는 인터페이스와 유사합니다.
예를 들어
물론 $location, $rootScope 등의 전역변수는 다른 컴포넌트를 거치지 않아도 되기 때문에 인젝션을 통해 얻을 수 있습니다.
高洛峰2017-05-15 16:52:23
실제로 테스트해 보니 서비스의 값을 컨트롤러의 $scope에 반환하면 클로저가 아무런 효과가 없는 것 같았습니다. 하지만 $scope를 전달하면 컨트롤러의 $scope가 직접 업데이트됩니다.
아주 잘 작동해요.