0

index.html は次のとおりです。

    <!DOCTYPE html>
<html lang="en" ng-app="myApp">

<head>
  <meta charset="utf-8">

  <title>HTTP Request</title>

  <script src="angularjs"></script>
  <script src="appjs"></script>

</head>
<body>
        <p>Data sharing example :</p>
        <div ng-controller="firstCtrl">
            <input type="text" ng-model="numval">
            <p>Inside first DIV : {{numval}}</p>
        </div>
        <div ng-controller="secondCtrl">
            <input type="text" ng-model="numval">
            <p>Inside second DIV : {{numval}}</p>
        </div>
</body>
</html>

そして app.js は次のとおりです。

var myApp = angular.module('myApp', []);

myApp.service('sharedata', function() {
    return 'common data';
});

    myApp.controller('firstCtrl', ['$scope', '$http', 'sharedata', function($scope, $http, sharedata) {
        alert('first');
        $scope.numval='first';
        $scope.numval=sharedata;
    }]);

    myApp.controller('secondCtrl', ['$scope', '$http', 'sharedata', function($scope, $http, sharedata) {
        alert('second');
        $scope.numval='second';
        $scope.numval = sharedata;
    }]);

私は愚かな間違いを見つけることができません....!最初の入力ボックスまたは 2 番目の入力ボックスのどちらでデータを変更しても、両方の DIV タグに変更が反映されるはずです。

4

1 に答える 1

2

次のことを試してください。

var myApp = angular.module('myApp', []);

myApp.service('sharedata', function() {
    return {numval: "Something"};
});

myApp.controller('firstCtrl', ['$scope', '$http', 'sharedata',
    function($scope, $http, sharedata) {
        alert('first');
        $scope.sharedata = sharedata;
    }]
);

myApp.controller('secondCtrl', ['$scope', '$http', 'sharedata',
    function($scope, $http, sharedata) {
        alert('second');
        $scope.sharedata = sharedata;
    }]
);

そして、HTML、両方<div>の s:

        <input type="text" ng-model="sharedata.numval">
        <p>Inside ___ DIV : {{sharedata.numval}}</p>

あなたの間違い:

  • $scope.numval='first'; $scope.numval=sharedata;意味がありません...
  • サービスはsharedata値を返しています。値を変更することはできません。値を含む参照 (つまり、オブジェクト) を返す必要があります。そうすれば、両方のスコープがそれに書き込むことができます。
于 2013-09-20T13:06:07.067 に答える