0

如果 'User' 是一项服务,而 'User.get' 是一种执行请求的方法。

<button class="btn" ng-click="User.get(users,'id,uname,email,pw')">
<p>{{users}}</p>

如何使用该代码示例将请求数据分配给范围变量“用户”?我喜欢这种代码风格,但我不知道如何实现它。有任何想法吗?

服务提供者的例子:

angular.module('User',[]).
provider('User', function() {
    var path = 'user.php';
    this.$get = function($http) {
        var r = {};
        r.get = function(variable,fields){
            $http.get(path+'?fields='+fields).
            success(function(data){
                //variable = data;
            });
        }
        return r;
    };
    this.setPath = function(p){path = p;};
});
4

1 回答 1

4

使用控制器并为其ng-click内部编写处理程序。这是一个例子:

控制器:

function Ctrl($scope) { 
    $scope.getUsers = function (fields) {
        $scope.users = User.get(fields);
    }
}

HTML:

<div ng-controller="Ctrl">
    <button class="btn" ng-click="getUsers('id,uname,email,pw')">
    <p>{{users}}</p>
</div>

另一种方法是将this引用(范围)和属性名称('users')传递给服务:

<button class="btn" ng-click="User.get(this, 'users', 'id,uname,email,pw')">

然后在User服务上,得到结果后,做这样的事情:

r.get = function(scope, prop, fields){
        $http.get(path+'?fields='+fields).
        success(function(data){
            scope[prop] = data;
        });
}

其中scope=这个prop= '用户'。

恕我直言,第一种方法是最好的,第二种方法听起来有点笨拙。

于 2013-02-06T18:51:42.850 回答