国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

angular.js - angular 中 $scope 不刷新的問題
ringa_lee
ringa_lee 2017-05-15 16:51:08
0
5
1138

請(qǐng)問我做了一個(gè)頁面,其中header部分是ng include進(jìn)來的(裡面有l(wèi)ogincontroller來判斷是否顯示login按鈕),同時(shí)我在ngroute裡面定義了一個(gè)登陸頁面,它也用logincontroller,我透過$http拿到資料後回調(diào)到scope,但是視圖頁面沒有更新,好像同一個(gè)controller有兩個(gè)作用域一樣,這是為什麼? (我發(fā)現(xiàn)在nginclude完成的時(shí)候會(huì)執(zhí)行一次logincontroller裡面的東西,當(dāng)進(jìn)入登陸頁面時(shí)又會(huì)觸發(fā)一次)

我還嘗試了網(wǎng)路上說的$apply()結(jié)果會(huì)回傳正在一個(gè)錯(cuò)誤

    function($scope,$http,$location,$timeout,userService,notifyService) {
        $scope.login = {
            userid:"bbbbb",
        }
        $scope.user={islogged:0}
        $timeout(function(){ 
            //$scope.user={islogged:1}
            console.log($scope.user);
        },5000)
        $scope.httplogin = function(){
            $http({
                method:'POST',
                url:server.domain+server.login,
                data:{
                    userid:$scope.login.userid,
                    password:$scope.login.password,
                },
            }).success(function(d){
                if(d.code == 200){
                    $scope.login={userid:1111111}
                    $scope.user={islogged:1}
                    notifyService.make('success',d.data.msg,5)
                }else{
                    alert(d.msg)
                }
            })
        }

上面是controller的程式碼,其中在timeout裡面由consolelog,如果打印它會(huì)一次出現(xiàn)三個(gè),是不是我在三個(gè)地方都用了同一個(gè)ngcontroller的原因,如果註釋調(diào)timeout中的$scope. user={islogged:1},會(huì)印成這樣的,這樣對(duì)於我的任務(wù)來說就不正常了,我希望他們都是相同的

Object {islogged: 0}
Object {islogged: 0}
Object {islogged: 1}

如果取消$scope.user={islogged:1}註解讓它運(yùn)作就會(huì)正常列印三個(gè)controller都是正常的了。

Object {islogged: 1}
Object {islogged: 1}
Object {islogged: 1}

================
剛剛又測(cè)試了下,它是只在當(dāng)前觸發(fā)的ngcontroller下修改了數(shù)值,如果多個(gè)ngcontroller的話其它ngcontroller的數(shù)值不會(huì)發(fā)生變化,不管是在nginclude還是ngview下都是這樣。如何讓同一個(gè)ngcontroller修改的資料能同步到另一個(gè)地方?

ringa_lee
ringa_lee

ringa_lee

全部回覆(5)
世界只因有你

你確定是同一個(gè)scope嗎? ng-include會(huì)建立新的scope的。

看了程式碼之後

確實(shí)是的每一個(gè)controller都是單獨(dú)的實(shí)例的,互不影響。你可以考慮把資料狀態(tài)放到一個(gè)全域(更上一層)的scope下;更好的方式應(yīng)該是透過service統(tǒng)一來管理

例如這樣:

html<body ng-app="app">

    <p ng-controller="loginCtrl">
        <pre>{{info}}</pre>
    </p>
    <script type="text/javascript">
    var app = angular.module('app', []);

    app.factory('login', ['$timeout', function($timeout){
        var ret = {

            info: {
                isIn: false
            }
        };

        // 模擬ajax請(qǐng)求
        $timeout(function() {
            ret.info.isIn = true;
        }, 1000);

        return ret;
    }]);

    app.controller('loginCtrl', ['$scope', 'login', function($scope, login){

        $scope.info = login.info;
    }])
    </script>
</body>
劉奇

$scope.$apply()不行麼?

漂亮男人

最好先確定你在兩個(gè)地方看到的 $scope 是同一個(gè) scope,而不是其中一個(gè)是另一個(gè)的子 scope 什麼的。

伊謝爾倫

貼程式碼上來好些~

漂亮男人

我也遇到相同的問題,$scope第一次改變的時(shí)候,界面上的數(shù)據(jù)不動(dòng),但當(dāng)界面有了變化(比如說開始淡出時(shí))數(shù)據(jù)就會(huì)立即變化,然後之後$scope再變的時(shí)候,介面就跟著變了。

我也試過用$apply,但會(huì)報(bào)一大長(zhǎng)串錯(cuò)誤,據(jù)說好像是什麼已經(jīng)在使用了,之類的……也不懂……希望能有解答辦法。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板