gpt4 book ai didi

javascript - 如何从另一个 Controller 更新 Controller 的 ng-repeat 模型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:45:28 26 4
gpt4 key购买 nike

我有两个 <div>有自己的 Controller 。第一个 div 有一个 ng-model="listEntries" .我初始化 listEntries在这个<div>的 Controller 。

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>

我通过了 $scopegetList()并设置 $scope.listEntries serviceForFirst 中的值.然后我使用 listEntries作为ng-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
};
});

这是我的第二个 Controller 和与之关联的服务。我打算将新元素插入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
};
});

<div> 的 HTML

<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() ,我看到每个服务中的适当函数都被调用,但列表没有更新。

我应该如何更新列表?

最佳答案

您只需要一项服务,它保存您打算在不同 Controller 之间共享的数据。 Demo

模板

<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>

Controller 和服务

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

关于javascript - 如何从另一个 Controller 更新 Controller 的 ng-repeat 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28905111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com