Javascript 在AngularJS中从列表拼接用户时视图未更新

Javascript 在AngularJS中从列表拼接用户时视图未更新,javascript,angularjs,Javascript,Angularjs,当我使用slice将用户从列表中删除时,我的应用程序中出现了这个问题。但是,它不会从列表中删除。我正在使用API url调用获取用户。但由于某些原因,它不会将用户从列表中删除。请看一下我的密码。如果你们想要完整的代码,我已经把它放在我的github里了。我希望我们都能解决这个问题。先谢谢你 这是我的密码: 编辑 拯救 msg=msg | | | attrs.confirm单击| |“您确定要确认吗?”; //打开一个对话框,然后在确认后继续单击操作 dialogModal(msg).resul

当我使用
slice
将用户从列表中删除时,我的应用程序中出现了这个问题。但是,它不会从列表中删除。我正在使用API url调用获取用户。但由于某些原因,它不会将用户从列表中删除。请看一下我的密码。如果你们想要完整的代码,我已经把它放在我的github里了。我希望我们都能解决这个问题。先谢谢你

这是我的密码:


编辑
拯救
msg=msg | | | attrs.confirm单击| |“您确定要确认吗?”;
//打开一个对话框,然后在确认后继续单击操作
dialogModal(msg).result.then(函数(){
范围.$eval(ngClick);
});
//返回false以停止当前ng点击流并等待我们的模式答案
返回false;
};
}
}
}])
/*
带有UI引导模式服务的模式确认对话框窗口。
这是一个基本模式,可以显示带有“是”或“否”按钮的消息。
它返回一个承诺,该承诺根据是/否单击被解决或拒绝。
可以传递以下设置:
消息要传递给模态体的消息
标题(可选)模式窗口的标题
“是”按钮的“确定”按钮文本。将false设置为不包括按钮
取消没有按钮的按钮文本。ste false不包括按钮
*/
.service('dialogModal',['$modal',function($modal){
返回功能(消息、标题、确认按钮、取消按钮){
//设置按钮的默认值
//如果按钮值设置为false,则不包括该按钮
cancelButton=cancelButton==false?false:(cancelButton | |“No”);
okButton=okButton==false?false:(okButton | | Yes');
//设置控制器以观察单击
var ModalInstanceCtrl=函数($scope、$modalInstance、settings){
//将设置添加到范围
角度扩展($scope,settings);
//单击“是”按钮
$scope.ok=函数(){
//警惕(“律师确认”);
$modalInstance.close(true);
};
//没有点击任何按钮
$scope.cancel=函数(){
$modalInstance.disclose('cancel');
};
};
//打开modal并返回实例(这将在单击确定/取消时解析承诺)
var modalInstance=$modal.open({
模板:'\
\
{{modalTitle}}\
\
{{modalBody}}\
\
{{okButton}}\
{{cancelButton}\
\
',
控制器:ModalInstanceCtrl,
决心:{
设置:函数(){
返回{
modalTitle:标题,
modalBody:message,
OK按钮:OK按钮,
取消按钮:取消按钮
};
}
}
});
//返回模态实例
返回模态;
}
}])
app.config(函数($routeProvider){
$routeProvider
.when(“/律师”{
控制器:“家庭控制器”,
templateUrl:“partials/home.html”
})
.when(“/lawyer/:id”{
控制员:“律师控制员”,
templateUrl:“partials/about.html”
})
.否则({
重定向到:“/律师”
});
});

但元素正在从列表中删除,对吗

如果是,请尝试以下方法:

$scope.confirmedAction = function (lawyer) {
    $scope.$apply(function () {
      var index = $scope.userInfo.lawyers.indexOf(lawyer);
      console.log($scope.userInfo.lawyers);
      $scope.userInfo.lawyers.splice(index, 1);
      console.log($scope.userInfo.lawyers);
      $window.location.href = '#/lawyer';
    });
});


问题是,在像您这样对对象数组使用IndexOf时,无法从IndexOf获取索引。阅读更多关于IndexOf的信息

相反,请使用map,然后在上面使用IndexOf

试着这样做:

$scope.confirmedAction = function (lawyer) {
    var index = $scope.userInfo.lawyers.map(function(e) { return e.id; }).indexOf(lawyer.id);
    $scope.userInfo.lawyers.splice(index, 1);
    console.log($scope.userInfo.lawyers);
    $window.location.href = '#/lawyer';
};
此外,默认情况下,angular的摘要循环将检测控制器更改,因此无需使用
$scope.$apply
。 此外,使用基本的获取数组列表和删除函数简化了plunker。用它来为弗雷德修路


您的意思是在控制台中,是的。好吧,它不会再次删除列表。我尝试了$timeout的代码。我想是重新加载页面的href吗?它用第二个代码删除。但是我希望列表再次显示,没有该用户,然后我希望当他们重新加载页面时,不要让用户再次显示$state未定义。。。当我放置时:app.controller('MyCtrl',function($scope、$window、$timeout、$state)它仍然提供angular.js控制台error@MarcusH检查我的github链接,我所有的代码都在里面。是的,我可以看到。但是如果你在代码运行的地方为我们提供一个plunker,那么我们就可以更容易地帮助你。你可以只克隆它,然后在你的本地主机上运行并查看它。拜托。因为我已经把它放在github中了。@MarcusH你还需要我吗要放入plunker还是您仍在尝试解决它?刚刚离开我的计算机,所以我现在无法帮助您。但我建议您创建一个plunker谢谢您的回答。但是,我可以使用api url远程吗?Np,api url无法从plunker访问,因此我添加了模拟数据。您可以使用e api而不是您端的mock:-)只需设置mock.use=false@SuzyHakobyan@SuzyHakobyan你试过我的建议解决方案了吗?你能告诉我一种方法,用远程api url而不是伪json吗。?
$scope.confirmedAction = function (lawyer) {
    $scope.$apply(function () {
      var index = $scope.userInfo.lawyers.indexOf(lawyer);
      console.log($scope.userInfo.lawyers);
      $scope.userInfo.lawyers.splice(index, 1);
      console.log($scope.userInfo.lawyers);
      $window.location.href = '#/lawyer';
    });
});
$scope.confirmedAction = function (lawyer) {
    $timeout(function () {
      var index = $scope.userInfo.lawyers.indexOf(lawyer);
      console.log($scope.userInfo.lawyers);
      $scope.userInfo.lawyers.splice(index, 1);
      console.log($scope.userInfo.lawyers);
 $state.go($state.current, {}, {reload: true}); 
      // $window.location.href = '#/lawyer';
    },1100);
});
$scope.confirmedAction = function (lawyer) {
    var index = $scope.userInfo.lawyers.map(function(e) { return e.id; }).indexOf(lawyer.id);
    $scope.userInfo.lawyers.splice(index, 1);
    console.log($scope.userInfo.lawyers);
    $window.location.href = '#/lawyer';
};