0

以下のコードは、異なるコントローラーを使用して 1 つのページ内で動作していますが、あるページから別のページに値を渡すと、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 />
4

1 に答える 1

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>

于 2016-11-10T12:01:14.710 に答える