如何在ng-repeater

时间:2015-06-08 10:10:16

标签: angularjs

当第一次绑定发生时,我希望列表重新绑定数据当选择输入(id为'checkin')发生变化时,我该怎么办?

var m = angular.module('users', []);

m.controller('UserList', function($scope) {

    $scope.getdata = function() {
        var u = "http://www.example.com/admin?queryusers";
        var userlist = this;
        var body = {
            activityid: "10",
            checkin: $('#checkin').val()
        };
        $.ajax({
            url: u,
            type: "post",
            async: false,
            data: body,
            success: function(data) {
                userlist.users = data;
            }
        });
        return userlist.users;
    };

    this.users=$scope.getdata();

    $('#checkin').change(function() {
        this.users=$scope.getdata();
        $scope.$apply();
    });

});

1 个答案:

答案 0 :(得分:0)

  

你的问题是你在缺少的angularjs中使用jQuery   角度摘要周期,这就是为什么绑定不会在html上更新。

你不应该在角度内部使用$.ajax,这会与角度消化周期混淆,你需要使用$http调用来安全地进行ajax调用,&在ajax完成后更新绑定。

此外,您不应该在角度内的元素上使用jquery事件,您必须替换该更改事件以使用ng-change,然后无需担心摘要周期。

<强>标记

<input type="checkbox" id="checkin" ng-model="myCheckbox" ng-change="getdata()"/>

<强>控制器

var m = angular.module('users', []);

m.controller('UserList', function($scope, $http) {

    $scope.getdata = function() {
        var u = "http://www.example.com/admin?queryusers";
        var userlist = this;
        var body = {
            activityid: "10",
            checkin: $('#checkin').val()
        };
        $http({
            url: u,
            method: "post",
            //async: false,
            data: body,

        }).success(function(data) {
            userlist.users = data;
        });

    };

    this.users = $scope.getdata();

    //below code will call getdata directly from html on ng-change
    //$('#checkin').change(function() {
    //    this.users = $scope.getdata();
    //    $scope.$apply();
    //});

});