2016-04-27 6 views
5

controller.jsNameServiceというサービスを定義しました。私は2つの異なるコントローラのNameServiceにある変数を使用したいと思います。あるコントローラーでサービス変数を更新し、別のコントローラーで更新された値を使用する - 角度付きJS

App.service('NameService', function(){ 
    this.Name = ""; 
    this.getName = function(){ 
    return this.Name; 
    }; 
    this.setName = function(name){ 
    this.Name = name; 
    } 
}); 

を次のように

私のサービスは、私は私が私のNameserviceName変数現在の値を更新していたにnetControllerという名前のコントローラを持っています。私はpage1Controllerに更新された値を使用したいと思います。

App.controller('netController', ['$scope','$http','$window','NameService', function($scope,$http,$window,NameService) 
    { 
     $scope.initNet = function() 
     { 
      $http.post('/initNet',$scope.network).success(function(response) 
      { 
       if(response.status == "true") 
       { 
        $scope.$watch('NameService.setName()', function(){ 
         NameService.Name = $scope.network.name; 
        }); 
        NameService.setName($scope.network.name); 
        $window.location.href = '/page1'; 
       } 
       else 
       { 
        $scope.error = "Error!"; 
       } 
      }); 
     } 
    }]); 

を私は私のnetControllerそれが印刷されて更新された値でconsole.log(NameService.netName);を行う場合は、次のよう

NetControllerです。私page1Controllerそれは空の文字列を与えているにconsole.log(NameService.name);を行うれ

App.controller('page1Controller', ['$scope', '$http','NameService', function($scope, $http,NameService) 
    { 
      console.log(NameService.Name); 
    }]); 

を次のように

page1Controllerです。

誰かがこれを修正するのに手伝ってもらえますか?

+0

名前を取得するためのNameService.getName()関数があります。しかし、1つの場所でNameService.netNameを使用して取得し、別の場所でNameService.nameを使用しますか?両方の場所でNameService.getName()を使用してみませんか? –

+0

私はコードを変更しました!それでも同じエラー。 – Minions

+0

@Minions pageControllerはいつnetControllerに対してインスタンス化されますか? $ http呼び出しのために、値を取得しようとしているときのタイミングの問題かもしれません。また、Serviceの代わりにFactoryを使用して、名前フィールドを適切にカプセル化できるようにしてください。それ以外の人はSet()メソッドを使用する必要もなく、バッキング変数の値を簡単に上書きすることができます –

答えて

0

使用工場の代わりに、サービス

gisApp.factory('NameService', function() { 
    var _name = ""; 
    return { 

     getName: function() { 
      return _name; 
     }, 
     setName: function (name) { 
      _name = name; 
     } 
    } 
}); 
+0

私もこれを試しました。まだ空文字列が印刷されています。 – Minions

+0

名前にデフォルト値を追加してもう一度お試しください。**名前**を取得する場合は、設定した部分を確認してください – aseferov

+0

よろしくお願いします!私が名前を初期化すると、それは名前を印刷しています!それは私のnetControllerで更新されていますが、私のpage1Controllerでは名前だけを印刷しています。 – Minions

0

あなたがその変数を印刷するために呼び出すとき、それはまだ定義されていないので。 $ httpお返事約束しておりますので、時間の間隔が必要です。間隔を内側に設定しようとしましたページ1コントローラ?使用する構文は、使用する「新しい」を使用して、そのサービスのインスタンスを作成する必要があるため、この

gisApp.service('NameService', function(){ 
    return { 
    Name: '', 
    getName: function(){ 
    return this.Name; 
    }, 
    setName: function(name){ 
    this.Name = name; 
    } 
}); 

ような何かをしようと次に

を編集したような

App.controller('page1Controller', ['$scope', '$http','NameService', '$timeout' function($scope, $http,NameService, $timeout) 
{ 
    $timeout(function(){ 
     console.log(NameService.name) 
    },2000); 
... 

それはクラスとして。

+0

私は提案を試してみました!まだ空の文字列が返されています! – Minions

+0

私は見ませんでした。あなたは "setName"関数を使用します。 "netName"フィールドはありません。 "name"フィールドはありません。 "Name"は小文字ではなく、大文字は –

+0

です。私のコードに変更!それでも同じエラーが出ます。 – Minions

関連する問題