質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

1回答

1269閲覧

AngularJSのserviceをつかって値を共有したいのですが...

rubellite

総合スコア10

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2019/02/14 05:16

編集2019/02/25 23:27

AngularJSのserviceを使用して値を共有したいのですが、下記のソースのように、ページ読み込み時にJSONデータをservice部分で設定します。

その後、ページに設置しているボタンでservice部分に設定されている変数の中身を書き換えても、実際のページのデータが、最初に読み込んだJSONデータのまま書き換わらないのですが、何が問題なのでしょうか?

AngularJS双方向データバインディングで動いているので、service部分のdataを更新すれば自動的に、ページ部分に設定している「$scope.return_data」の値も変わり、実際のページも新しい値に置き換わると思っていたのですが...

$intervalなどを使用して、再読み込みなどをしないとデータは更新されないのでしょうか?

AngularJSのバージョンは、v1.7.5です。


//service部分
module.service('sharedData', function () {

var data = {};

data = [
{id: "1",date: "2018-03-19 01:18"},
{id: "2",date: "2018-03-19 02:18"}
];

return {

return_data: data,
update_json: function () {

data = [
{id: "3",date: "2018-03-19 03:18"},
{id: "4",date: "2018-03-19 04:18"}
];

return data; //変更後の値を代入

}

};

});

//controller部分
module.controller('CNT1', function ($scope, sharedData) {

$scope.update_json = function () {

var res = sharedData.update_json();

alert("JSONを更新しました!");

}

});

module.controller('CNT2', function ($scope, sharedData) {

$scope.return_data = sharedData.return_data;

});


//ページの部分

<div ng-controller="CNT1"> <p>■CNT1■</p> <button ng-click="update_json()">JSON書き換え</button> </div> <p></p> <div ng-controller="CNT2"> <p>■CNT2■</p> <table> <tbody> <tr> <td align="center" nowrap="nowrap">ID</td> <td align="center" nowrap="nowrap">日付</td> </tr> <tr ng-repeat="data in return_data"> <td nowrap="nowrap">{{data.id}}</td> <td nowrap="nowrap">{{data.date}}</td> </tr> </tbody> </table> </div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

//controller部分に書かれている、

$scope.return_data = sharedData.return_data;

を、

$scope.return_data = sharedData;

としてやれば、serviceの値が変更になったときに、自動的にcontrollerの値も変更されるようになりました。

投稿2019/02/25 23:29

rubellite

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問