2016-11-10 56 views
0

下面的代碼在一個頁面中與不同的控制器一起工作,但是當我將值從一個頁面傳遞到另一個頁面時,scope.watch不起作用。你怎麼能這樣做?下面是我的代碼。

.factory('Data', function() { 

    var data = { 
     LastName: '', 
    } 
    return { 
     getLastName: function() { 
      return data.LastName; 
     }, 
     setLastName: function (lastname) { 
      data.LastName = lastname; 
     } 
    } 
} 
    //FIRST CONTROLLER 
    $scope.lastname = ''; 
    $scope.$watch('lastname', function (newValue2, oldValue2) { 
     if (newValue2 !== oldValue2) 
      Data.setLastName(newValue2); 
    }); 
    //GET FIRST CONTROLLER INTO SECOND 
    $scope.$watch(function() { 
     return Data.getLastName(); 
    }, function (newValue2, oldValue2) { 
     if (newValue2 !== oldValue2) 
      $scope.lastname = newValue2; 
    }); 
    //form 
    //Firstcontroller 
    < input type = "text" 
      name="lastname" 
      placeholder = "Suhr" 
      ng-model="lastname" 
      ng-minlength="3" required /> 
+0

你有 '數據' 和 '數據',這是不一樣的東西。 – rrd

+0

您忘記將第一個參數傳遞給$ watch,即var名稱。 – Matheus

+0

對不起@rrd,現在檢查代碼,更新。你現在可以幫忙嗎? –

回答

1

移植所有的代碼,它的工作原理!

angular.module("test", []) 
 
    .controller('Test1', Test1) 
 
    .controller('Test2', Test2) 
 
    .factory('Data', Data); 
 

 
function Test1($scope, Data) { 
 
    $scope.lastname = ''; 
 

 
    $scope.$watch('lastname', function(newValue2, oldValue2) { 
 
    if (newValue2 !== oldValue2) 
 
     Data.setLastName(newValue2); 
 
    }); 
 
} 
 

 
function Test2($scope, Data) { 
 
    $scope.$watch(function() { 
 
    return Data.getLastName(); 
 
    }, function(newValue2, oldValue2) { 
 
    if (newValue2 !== oldValue2) 
 
     $scope.lastname = newValue2; 
 
    }); 
 
} 
 

 
function Data() { 
 
    var data = { 
 
    LastName: '', 
 
    } 
 

 
    return { 
 
    getLastName: function() { 
 
     return data.LastName; 
 
    }, 
 
    setLastName: function(lastname) { 
 
     data.LastName = lastname; 
 
    } 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
 

 
<div ng-app="test"> 
 
    <div ng-controller="Test1"> 
 
    <input type="text" name="lastname" ng-model="lastname" placeholder="Suhr" ng-minlength="3" required> 
 
    </div> 
 

 
    <div ng-controller="Test2"> 
 
    {{lastname}} 
 
    </div> 
 
</div>

+0

當我有兩個不同的html頁面時,這會工作嗎?如果瀏覽器被刷新? –

+0

@AbelAnojanSithamparappillai以及它取決於。如果你的2頁都在同一個角度的應用程序,那麼它會工作。角度服務數據無法在頁面重新加載時存活,您必須將其保存在數據庫,localStorage,sessionStorage或適用於大型數據集的Cookie – Icycool

+0

中?我試了localStorage,我的瀏覽器被擊中了。任何其他 ? –

相關問題