5

私はバインディングが角度のあるものであると2つの方法を考えました:

フォームからコントローラーに投稿できます。ページを更新すると、ページに入力が表示されます。

$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 のようなサービスを使用する場合とは少し異なります。サービス$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 に答える