为什么在模态解析上声明一个函数

时间:2014-05-27 10:15:08

标签: javascript angularjs function angular-ui bootstrap-modal

关于模态angular-ui的这个代码示例我有两个简单的问题。

可以找到代码here,我也引用了有趣的部分:

var ModalDemoCtrl = function ($scope, $modal, $log) {

  $scope.items = ['item1', 'item2', 'item3'];

  $scope.open = function (size) {

    var modalInstance = $modal.open({
      templateUrl: 'myModalContent.html',
      controller: ModalInstanceCtrl,
      size: size,
      resolve: {
        items: function () {
          return $scope.items;
        }
      }
    });

    modalInstance.result.then(function (selectedItem) {
      $scope.selected = selectedItem;
    }, function () {
      $log.info('Modal dismissed at: ' + new Date());
    });
  };
};

// Please note that $modalInstance represents a modal window (instance) dependency.
// It is not the same as the $modal service used above.

var ModalInstanceCtrl = function ($scope, $modalInstance, items) {

  $scope.items = items;
  $scope.selected = {
    item: $scope.items[0]
  };

  $scope.ok = function () {
    $modalInstance.close($scope.selected.item);
  };

  $scope.cancel = function () {
    $modalInstance.dismiss('cancel');
  };
};

所以我的第一个问题是,为什么我需要在items上声明一个函数:

resolve: {
  items: function () {
    return $scope.items;
  }
}

我做不了类似的事情:

resolve: {
  items: $scope.items;
}

我的第二个问题是为什么items不是带单引号的字符串? javascript如何将密钥混淆为局部变量?

感谢您的解释!

1 个答案:

答案 0 :(得分:3)

对于第一个问题:

resolve: {
  items: function () {
    return $scope.items;
  }
}

resolve.items是一个功能。 resolve.items()返回(是)数组

resolve: {
  items: $scope.items;
}

resolve.items是一个数组 resolve.items()会导致错误。

需要是因为框架需要调用函数。

对于第二个问题:JS!= JSON。语法使它成为可能。如果您已将items=...改为items: ...,那么它将被创建为全局变量(如果严格模式处于活动状态,则会产生错误)