我对角度和javascript一般都是新手,而且我陷入了可能是一个简单的问题。 基本上,我有一个控制器,它包含一些变量
(function ()
{
'use strict';
angular
.module('app.project')
.controller('ProjectController', ProjectController);
/** @ngInject */
function ProjectController($document, $mdDialog, $mdSidenav, Tasks, Tags, DashboardData)
{
// Methods
var vm = this;
vm.projects=[
{name: 'proj1'},
{name: 'proj2'},
{name: 'proj3'}
];
vm.selectedProject = vm.projects[0];
....
感兴趣的2个变量是数组项目和引用selectedProject。
在我的应用程序中,我使用服务打开一个模态,允许用户从数组中删除项目。问题是如果从阵列中删除所选项目,我找不到更新selectedProject的方法。据我所知,在我从服务代码中的数组中删除对象后,selectedProject仍保留对该对象的引用。
我在过去几天尝试了几种方法,现在我尝试在数组的长度上使用watch(),这样当它改变时我可以改变selectedProject的“指向”值。我仍然没有一个可行的解决方案,但是从性能的角度来看,看看它看起来像是看起来很费力。
我想要一个意见,如果这可能是一个合适的解决方案,或者我应该尝试找到另一个更有效率。
答案 0 :(得分:2)
更新$scope.selected
可以通过监听监听器来完成,您需要确保您的服务正在更新范围内的项目变量,以便接收更改。
$scope.$watch('projects', function(newValue, oldValue) {
if (newValue != oldValue && $scope.projects.length) {
$scope.selected = $scope.projects[0];
}
}, true);
<强>更新强>
如果您的控制器是用 Controller as 语法编写的,那么您需要为$ watch提供watchExpression功能。请注意,您需要将控制器的this
值绑定到watchExpression函数以访问您要观看的变量:
// $watch with Controller as syntax
$scope.$watch(angular.bind(this, function() {
return this.projects;
}), function(newValue, oldValue) {
// newValue is the changed value
});