Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从另一个控制器更新控制器的ng重复模型?_Javascript_Angularjs_Angularjs Scope_Angularjs Ng Repeat_Angularjs Digest - Fatal编程技术网

Javascript 如何从另一个控制器更新控制器的ng重复模型?

Javascript 如何从另一个控制器更新控制器的ng重复模型?,javascript,angularjs,angularjs-scope,angularjs-ng-repeat,angularjs-digest,Javascript,Angularjs,Angularjs Scope,Angularjs Ng Repeat,Angularjs Digest,我有两个带有自己控制器的。第一个div有一个ng model=“listEntries”。我在这个的控制器中初始化列表项 app.controller('firstController', function($scope,serviceForFirst){ serviceForFirst.init(); serviceForFirst.getList($scope); }); Html <div ng-controller="firstController">

我有两个带有自己控制器的
。第一个div有一个
ng model=“listEntries”
。我在这个
的控制器中初始化
列表项

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>
这是我的第二个控制器和与之关联的服务。每次调用
addNew()
时,我打算将新元素推入
listAll
。这就是我试图做到的

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
 };
});


....
....
但是列表在第一次更新中没有更新。如果我在设置
$scope.listEntries
之前尝试在
getList()
中执行
$scope.listEntries.$apply()
,那么我会得到$digest已在进行中的错误

当我执行
console.log()
时,我看到每个服务中的相应函数都被调用,但列表没有被更新


我应该如何更新列表?

您只需要一个服务,它保存您打算在不同控制器之间共享的数据

模板

<ul ng-controller='Ctrl1'>
    <li ng-repeat="item in items">
        {{item}}
    </li>
</ul>

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

分享HTML以获得更好的想法?控制器之间有父子关系吗?我添加了代码的HTML部分,它使用ng模型和控制器。这两个控制器之间没有父子关系。如果您正在传递作用域,则可以通过从服务函数返回并将其分配给控制器中的$scope.list来获取列表。为什么要使用两个服务,让第二个控制器向服务中的列表添加一个新项,并让scope从服务中获取新列表。完美的一个..但是$scope.items如何知道他需要调用服务getList()?绑定是如何更新的。你能在回答中解释一下吗?如果将使用ng视图查看,那么每次查看div时都会调用myListService.init()?在这种情况下,列表将重置为初始状态,您添加的内容将丢失。我错了吗?是的,如果你只想初始化列表一次,你应该在服务中初始化它。太好了!!我对不同控制器的不同服务造成了不必要的复杂性。我将更新答案以初始化服务中的列表。
<div ng-controller="secondController">
  ....
  <input type="text" ng-model="newName"/>
  <button ng-click="addNew(newName)"/>
  ....
</div>
<ul ng-controller='Ctrl1'>
    <li ng-repeat="item in items">
        {{item}}
    </li>
</ul>

<div ng-controller="Ctrl2">
    <input type="text" ng-model="newName"/>
    <button ng-click="addNew(newName)">Add</button>  
</div>
var app = angular.module('myApp', []);

app.controller('Ctrl1', function($scope, myListService){
    $scope.items = myListService.getList();
});

app.controller('Ctrl2', function($scope, myListService){
    $scope.addNew = myListService.add;
});

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

    function init(){
        list = ['one', 'two', 'three'];
    };

    var getList=function(){
        return list;
    };

    var add=function(newEntity){
        list.push(newEntity);
    };

    return{
        getList: getList,
        add: add
    };
});