0

像这样直接绑定到Angularjs中的服务有什么问题吗?

控制器:

function MyCtrl(myService) {
    $scope.myService = myService;
}

看法:

<button ng-click="myService.doSomething()"></button>

还是直接在控制器中声明视图中使用的方法和变量更好?

控制器:

function MyCtrl(myService) {
    $scope.doSomething = myService.doSomething;
}

看法:

<button ng-click="doSomething()"></button>
4

1 回答 1

1

为什么不。是的,它的好习惯。Service 的目标是避免代码重复。它就像实用程序。

如果我们的项目包含多个控制器,我们可以轻松地将我们的服务注册到每个控制器并使用存储在服务中的所有方法。

顺便说一句,它的良好做法也是在不同的文件中定义服务,以便您可以将服务迁移到其他项目。

此外,您可以将多个服务分组到一项服务中。这是示例:

myModule.factory('ajax_post', ['$http',
        function(_http) {

    var path = 'src/php/data.ajax.php';

    return{
        init: function(jsonData){
            var _promise= _http.post(path, 
                jsonData
                ,{
                    headers: {
                        'SOAPActions': 'http://schemas.microsoft.com/sharepoint/soap/UpdateListItems'
                    }
                }
                );            
            return _promise; 
        },       
        uploadFile_init: function(uploadedFile){
            var fd = new FormData();
            fd.append("uploadedFile", uploadedFile);
            var upload_promise =  _http.post("src/php/data.ajax.php",
                fd,
                {
                    headers:{
                        'Content-Type':undefined
                    },
                    transformRequest:angular.identity
                });

            return upload_promise;
        },
        uploadFile_init_for_compare: function(uploadedFile){
            var fd = new FormData();
            fd.append("uploadedFileForCompare", uploadedFile);
            var upload_promise =  _http.post("src/php/data.ajax.php",
                fd,
                {
                    headers:{
                        'Content-Type':undefined
                    },
                    transformRequest:angular.identity
                });

            return upload_promise;
        }     
    }   
}]);

上述服务包含 3 个子服务:

  • 在里面
  • uploadFile_init_for_compare
  • uploadFile_init

您可以从控制器调用子服务,例如:

ajax_post.init(/**/);
ajax_post.uploadFile_init_for_compare(/**/);
ajax_post.uploadFile_init(/**/);
于 2013-10-08T07:58:17.753 回答