$scope变量是未定义的,除非我再次强制它从服务中检索

The $scope variable is undefined unless I forced it to retrieve from service again

本文关键字:检索 服务 非我 变量 scope 未定义      更新时间:2023-09-26

下面是关于Angular控制器的代码片段。我正试图从这个github项目学习Angular

问题部分位于函数addStock。我已经定义了$scope。但是,如果我删除$作用域中的重新声明,就可以在初始化部分的watchlist中使用。addStock函数,$scope。将不会用正确的值填充Watchlist。有什么Angular专家能给我指出来吗?如果你想看到我的完整的项目代码-这里是链接。

angular.module('stockCatApp')
  .controller('WatchlistCtrl', function ($scope, $routeParams, $modal, WatchlistService, CompanyService) {
    // Initializations
    $scope.companies = CompanyService.query();
    $scope.watchlist = WatchlistService.query($routeParams.listId);
    $scope.stocks = $scope.watchlist.stocks;
    $scope.newStock = {};
    var addStockModal = $modal({
      scope: $scope,
      template: 'views/templates/addstock-modal.html',
      show: false
    });
    $scope.showStockModal = function () {
      addStockModal.$promise.then(addStockModal.show);
    };
    $scope.addStock = function () {
      //The following line needs to be put here again in order to retrieve the right value
      $scope.watchlist = WatchlistService.query($routeParams.listId);
      ///////////////////////////////////////////////////////////////////////
      $scope.watchlist.addStock({
        listId: $routeParams.listId,
        company: $scope.newStock.company,
        shares: $scope.newStock.shares
      });
      addStockModal.hide();
      $scope.newStock = {};
    };
  });

是否可以执行console.log($scope.watchlist);在绑定了两个$scope之后,看看数据和它的类型是否匹配?

$scope.watchlist = WatchlistService.query($routeParams.listId);
 console.log($scope.watchlist);
  $scope.watchlist.addStock({
    listId: $routeParams.listId,
    company: $scope.newStock.company,
    shares: $scope.newStock.shares
  });
console.log($scope.watchlist); 

请随意张贴日志

看起来好像你正在从一个模态调用$scope.addStock()。在这种情况下,模态不一定继承父作用域。这取决于您正在使用的所有内容的版本。看起来你正在使用角带(我看了你的鲍尔.json)。如果你查看他们的$modal源代码,你会发现:

https://github.com/mgcrea/angular-strap/blob/master/src/modal/modal.js

var scope = $modal。$scope = options。范围,,options.scope.$new() || $rootScope.$new();

所以,当你打开你的模态时,你正在创建一个新的作用域。但是,您可以使用$parent访问原始作用域。