angular.js - $.post dalam sudut tidak boleh terikat kepada $scope (perbezaan dalam penggunaan antara $.post dan $http.post)
大家讲道理
大家讲道理 2017-05-15 16:52:49
0
3
541

Seperti yang ditunjukkan di bawah, jika bahagian $scope.equipments=... diletakkan dalam $.post, ia tidak boleh terikat dengan $scope.equipments Jika ia diletakkan di luar, ia boleh diikat.


mainApp.controller('equipmentsController', function($scope, $http) { $.post("getAllDeviceList.action", {}, function(response){ $scope.equipments = [ { "id" : "1", "name" : "equipment01 ", "number" : "11" }, { "id" : "2", "name" : "equipment02 ", "number" : "22" }, { "id" : "3", "name" : "equipment03 ", "number" : "33" } ]; } ); $scope.equipments = [ { "id" : "1", "name" : "equipment01 ", "number" : "11" }, { "id" : "2", "name" : "equipment02 ", "number" : "22" }, { "id" : "3", "name" : "equipment03 ", "number" : "33" } ]; }
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(3)
洪涛

Setelah diingatkan oleh @lee1994522, saya menyedari bahawa jika kaedah $.post digunakan, maka 脱离了angular的上下文 ia tidak boleh terikat pada $scope sudut.

ini maksudnya, pls.. $.post bukan isu Sudut dan sebagainya
ia tidak berada dalam dunia Sudut, jadi jelas bahawa
peralatan di luar berada dalam dunia Angular dan ia berfungsi seperti yang anda harapkan

cuba $scope.$apply() apabila anda memanggil isu "none Angular" jika anda mahu
segarkan semula sth

Terdapat dua penyelesaian:

$.siaran

Yang pertama adalah seperti yang dikatakan @lee1994522, terus tambah ayat $scope.$apply() di hujung fungsi panggil balik $.post untuk mengikat perubahan pada paparan secara serentak

$.post("xxx.action",
            {},
            function(response){
                if(response.result == "success"){
                    ...
                    }
                    $scope.equipments = equipments; 
                    $scope.$apply();
                }
            },
            "json"
    );

$http.post

AngularJS - Sebarang cara untuk $http.post menghantar parameter permintaan dan bukannya JSON

Ditakrifkan secara global:


var app = angular.module('myApp'); app.config(function ($httpProvider) { $httpProvider.defaults.transformRequest = function(data){ if (data === undefined) { return data; } return $.param(data); } $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; });

Kemudian tulis dalam pengawal:

   $http.post("xxx.action").success(function(response) {  
            ...
            $scope.equipments = equipments; 
    });
曾经蜡笔没有小新

Saya tidak faham penggunaan $.post oleh poster asal. Apa guna menyuntik $http

给我你的怀抱

$.post anda bukan kaedah angular, jadi walaupun panggilan balik siaran sebenarnya dilaksanakan, angular tidak mengetahuinya pada paparan. Anda boleh mengikuti operasi tugasan dalam $.post dengan ayat lain $scope.$apply();, dan operasi tugasan akan berkuat kuasa.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan