更新引用变量

时间:2016-02-01 15:14:48

标签: arrays angularjs

我对角度和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的“指向”值。我仍然没有一个可行的解决方案,但是从性能的角度来看,看看它看起来像是看起来很费力。

我想要一个意见,如果这可能是一个合适的解决方案,或者我应该尝试找到另一个更有效率。

1 个答案:

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