2017-08-23 21 views
0

こんにちはみんな私の他のコントローラー "FormCtrl"で使用するために$ scope.testデータを送りたい $ scope.contentはidと他の多くのオブジェクトで$ scope.testは、それが依存AngularJSはコントローラーから別のコントローラーにデータを送信します

greez ...
var app = angular.module('surveyApp', []); 

app.controller('BackendCtrl', function($scope, $http){ 
    var apiURL = "JSON DATA"; 
    var apiURL2 = "DIFFERENT JSON DATA"; 

    $http.get(apiURL).then(function(response) { 
     $scope.content = response.data; 
    }); 

    $http.get(apiURL2).then(function(response) { 
     $scope.test = response.data; 
    }); 

    }); 


app.controller('FormCtrl', function($scope, $http) { 



     $scope.formData = {}; 
     $scope.formData.id = $scope.a.id; 

     $scope.formData.checkbox = "1"; 
     $scope.formData.textarea = $scope.a.id; 

     $scope.save = function(formData) { 
      $scope.submitFormData = angular.copy(formData); 


     $http({ 
      method: 'POST', 
      url: 'update.php', 
      data: $scope.submitFormData, 
      headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
     }); 


     }; 
}); 
+0

角度サービスを使用 –

+0

APIがそれを受け入れる場合は、データを「 'Content-Type:application/json'」として投稿することをお勧めします。 – georgeawg

+0

@georgeawg thx mate –

答えて

0

も私は同じIDで両方のデータを使用するIDです...しかし、もっと重要なFormCtrlでそれを使用するscope.testデータを取得することですあなたの階層の構築方法FormCtrlでBackendCtrlのデータを使用するとします。あなたのFormCtrlがあなたのBackendCtrlの内側に座っている場合は、そのような:

<div ng-controller="BackendCtrl"> 
... 
<div ng-controller="FormCtrl"></div> 
... 
</div> 

そしてFormCtrlはそれのすべての変数を継承します。

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

app.controller('BackendCtrl', function($scope, $http){ 
    $scope.myVariable = "foo"; 
}); 


app.controller('FormCtrl', function($scope, $http) { 
    console.log($scope.myVariable); // logs "foo" 
}); 


そうのようなあなたのコントローラは、兄弟である場合:

<div ng-controller="BackendCtrl"></div> 
... 
<div ng-controller="FormCtrl"></div> 

あなただけきれいな選択肢がであり、彼らはFormCtrlからスコープにあったと同じように、彼らが実際にあるので、あなたは、それらを呼び出すことができ$rootScopeを入力し、必要な変数をすべての子スコープにブロードキャストします。

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

app.controller('BackendCtrl', function($scope, $http, $rootScope){ 
    $scope.myVariable = "foo"; 

    $rootScope.$broadcast('broadcastEvent', $scope.myVariable); 
}); 


app.controller('FormCtrl', function($scope, $http) { 
    $scope.$on('broadcastEvent', function(event, broadcastedVariable) { 
     // optional: $scope.myVariable = "foo"; 
     console.log(broadcastedVariable); // logs "foo" 
    }); 
}); 

そうのようなあなたのFormCtrlは、BackendCtrlの親である場合:

<div ng-controller="FormCtrl"> 
... 
<div ng-controller="BackendCtrl"></div> 
... 
</div> 

は、あなたがあなたのBackendCtrlからデータを放出し、その後FormCtrlでそれを使用する必要があります。

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

app.controller('BackendCtrl', function($scope, $http, $rootScope){ 
    $scope.myVariable = "foo"; 

    $scope.$emit('broadcastEvent', $scope.myVariable); 
}); 


app.controller('FormCtrl', function($scope, $http) { 
    $scope.$on('broadcastEvent', function(event, broadcastedVariable) { 
     // optional: $scope.myVariable = "foo"; 
     console.log(broadcastedVariable); // logs "foo" 
    }); 
}); 

ただし、最後の2つのオプションを使用すると、スコープとコントローラーの全部についてのポイントが失われるためです。親でない別のコントローラからコントローラ内のデータにアクセスしたい場合、それを行う最善の方法は実際には親プロセスにするか、新しく作成した親コントローラ内のデータを両方とも定義することです。

+0

ありがとうございます!しかし、もし私が$ scope.testのためにng-repeatを使用しないなら、どうすればいいのでしょうか?テストでxのようなデータを使うことができますか?$ scope.contentのidのx.nameはng-repeatで使われています.. –

+0

申し訳ありません、しかし私はあなたを理解していません。あなたの質問はどこにありますか?そして、あなたは何について話していますか? –

関連する問題