5

我认为两种绑定方式是有角度的:

我可以从表单发布到控制器,如果我刷新页面,我会在页面上看到我的输入:

$scope.loadInput = function () {

    $scope.me.getList('api') //Restangular - this part works
    .then(function(userinput) {

        $scope.Input = $scope.Input.concat(userinput);
        // scope.input is being referenced by ng-repeater in the page 
        // so after here a refresh should be triggered.

    },function(response){
        /*@alon TODO: better error handling than console.log..*/
        console.log('Error with response:', response.status);
    });
};

在 html 页面中,ng-repeater遍历for i in input. 但是除非我刷新页面,否则不会显示来自表单的新输入。

我很乐意为此提供帮助-谢谢!

4

1 回答 1

5

尝试$scope.$apply

$scope.loadInput = function () {
        $scope.me.getList('api') //Restangular - this part works
        .then(function(userinput) {
               $scope.$apply(function(){ //let angular know the changes

                $scope.Input = $scope.Input.concat(userinput);
             });

            },function(response){
                /*@alon TODO: better error handling than console.log..*/
                console.log('Error with response:', response.status);
            });
    };

原因:你的ajax是异步的,它会在下一回合执行,但是这个时候,你已经离开了角循环。Angular 是不知道变化的,我们必须使用$scope.$apply这里来进入 Angular 循环。这种情况与使用 angular like 的服务有点不同$http,当您使用$http服务并在内部处理您的响应时.success,angular 会意识到这些变化。

不起作用的演示。您会注意到第一次单击不会刷新视图。

setTimeout(function(){
             $scope.checkboxes = $scope.checkboxes.concat([{"text": "text10", checked:true}]);
         },1);

通过使用工作的DEMO$scope.$apply

setTimeout(function(){
            $scope.$apply(function(){
         $scope.checkboxes = $scope.checkboxes.concat([{"text": "text10", checked:true}]);
            });
        },1);
于 2013-10-22T13:28:44.940 回答