正确的方法来创建一个包装器来连接AngularJS中的UI和数据

时间:2014-12-10 12:27:46

标签: angularjs angular-resource angularjs-resource

我是angularjs的新手。我正在尝试遵循此框架的最佳实践,但我不知道如何使其工作:

我有一个工厂,充当远程RESTful API的接口。

appServices.factory('UsersFactory', ['$resource', function($resource) {

    var baseUrl = "http://....";
    var actionUrl = baseUrl + "users/";

    return $resource(actionUrl + ":id", {id: "@id"},
    {
        'getAll': { 
            method: 'GET', 
            isArray:true
        },
        'assignRoleToUser':  { 
            'method': 'PUT',
            'url': actionUrl + ":id/assign-role-to-user",
            responseType: 'json'
        }
    });
}]);

此工厂具有获取,创建,更新和删除用户(获取,放置,发布后)以及自定义操作(例如,为用户分配角色)的常用功能。

然后我从一个视图中显示一个控制器,我向用户显示了工厂,并将工厂注入该控制器。

一旦用户按下按钮,我可以拨打以下内容:

UsersFactory.assignRoleToUser({id: 'userid', role: 'roleid'});

当我想扩展此功能时出现问题,例如在将角色分配给用户之后使用一些确认对话框和一些额外的逻辑。 只是一些简单的例子:

// In controller....
$scope.asssignRoleToUser(id_user, id_role) {

  ModalFactory.showConfirmDialog(blablabla, function() {
      UsersFactory.assignRoleToUser({id: 'userid', role: 'roleid'}, function(){
          AlertsDialogs.showAlert("User assigned correctly");
      });
  });
}

到目前为止,我现在想在其他视图或指令中重用assignRoleToUser代码。 我怎样才能实现它?创建一个像UserFactory的包装器/接口一样的服务,但是添加可以在我的webapp中重用的UI行为?

欢迎任何帮助:)

1 个答案:

答案 0 :(得分:0)

如果要添加UI行为,那么最好只为UI行为创建一个指令。

例如,一个确认对话框指令,然后(在确认之后)调用您传递给它的任何函数。

但如果您愿意,您当然可以使用常用的UI功能创建服务,然后将其注入您需要的任何控制器。但作为标准,您应该使用指令操作UI。