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 が更新されます。サービス内のコントローラー、このようにとても便利です