3

<div>独自のコントローラーを備えた2つがあります。最初の div にはng-model="listEntries". listEntriesthis<div>のコントローラーで初期化します。

app.controller('firstController', function($scope,serviceForFirst){
      serviceForFirst.init();
      serviceForFirst.getList($scope);
});

HTML

<div ng-controller="firstController">
 <ul>
  <li ng-repeat="each in listEntries">
     {{each.name}}
  </li>
 <ul>
</div>

に を渡し、$scopeに値getList()を設定します。次に、として使用します。$scope.listEntriesserviceForFirstlistEntriesng-model

app.service('serviceForFirst',function(){
 var list=[];
 var init=function(){
  list = [{....}];

 };

 var getList=function($scope){
  $scope.listEntries = list;

 };
 var update=function(newEntity){
   list.push(newEntity);
 };
return{
 init:init,
 getList:getList,
 update:update
};
});

これは私の 2 番目のコントローラーであり、それに関連付けられたサービスです。listAllを呼び出すたびに、新しい要素をプッシュするつもりaddNew()です。これが私がやろうとしている方法です。

app.controller('secondController', function($scope,serviceForSecond){
  serviceForSecond.init();
  $scope.addNew=function(newEntity){
         serviceForSecond.addNew(newEntity);
  };
});


app.service('serviceForSecond',function(serviceForFirst){
  var entities=[];
 var init=function(){
   entities=[{....}];
 };
 var addNew=function(newEntity){
    entities.push(newEntity);
    serviceForFirst.update(newEntity);
 return{
   init:init,
   addNew:addNew
 };
});

このための HTML<div>

<div ng-controller="secondController">
  ....
  <input type="text" ng-model="newName"/>
  <button ng-click="addNew(newName)"/>
  ....
</div>

しかし、最初のリストは更新されていません<div>$scope.$apply()設定するgetList()前に実行しようとすると$scope.listEntries、 $digest already in progress エラーが発生します。

実行するとconsole.log()、各サービスの適切な関数が呼び出されていることがわかりますが、リストは更新されていません。

リストを更新するにはどうすればよいですか?

4

1 に答える 1