Javascript 角度$scope变量未定义

Javascript 角度$scope变量未定义,javascript,angularjs,Javascript,Angularjs,我将先说明$scope.$apply()在addToOrder()中调用时,它不起作用。我的控制台输出以下错误: Error: [$rootScope:inprog] $apply already in progress http://errors.angularjs.org/1.2.25/$rootScope/inprog?p0=%24apply 至于核心问题,当我尝试在将项目对象推入订单数组之前设置其数量时,它总是返回未定义的 这是我的HTML: <label class="item

我将先说明
$scope.$apply()
addToOrder()
中调用时,它不起作用。我的控制台输出以下错误:

Error: [$rootScope:inprog] $apply already in progress
http://errors.angularjs.org/1.2.25/$rootScope/inprog?p0=%24apply
至于核心问题,当我尝试在将
项目
对象推入订单数组之前设置其数量时,它总是返回未定义的

这是我的HTML:

<label class="item item-input col">
    <input type="number" ng-model="quantity" value="1">
</label>
<div class="item col">{{quantity}}</div><!-- verify that $scope.quantity exists -->
<button class="button button-full button-positive" ng-click="addToOrder()">
    Add to Cart
</button>

如前所述,您应该选择controllerAs解决方案。为每个视图添加具有唯一名称的controllerAs属性。然后在模板中可以使用表示范围的名称

例如,在您的视图中使用:

{ controllerAs:'mainctrl' }

在您的视图中{{mainctrl.quantity}

发明Controllera是为了防止这种典型的角型头痛

<input type="number" ng-model="quantity" value="1">
即使您将value属性保留在那里,它也可以工作。但这是微不足道的

在这个问题上可能缺乏明确性,因为假设
quantity
可能是menuItem的一个预先存在的属性并不牵强。事实并非如此。这是我在生成OrderItem时附加到本地实例的额外数据。这与MenuItem的不同之处在于,MenuItem包含菜单上显示的数据。OrderItem包含订单上显示的数据(例如订购数量)

旁白:我在研究@WalterBrand的答案时。但我知道这是为了处理父子关系之间的数据,而这不是


感谢您帮助所有人…

您只需要$scope.apply如果角度周期之外的事件调用了
addToOrder
,例如地理位置调用如果
$apply
抛出异常,那么谈论代码的进一步执行就没有意义了。抱歉,
$apply()
是我控制器中的一个工件。请不要理会@akonsumaybe
quantity
是在子作用域上创建的?更好的方法是使用controllerAs来避免这种情况
.state('tabs.menu', 
  { url: '/menu', 
    views: { 
      'tab-menu': { 
        controller: 'MenuCtrl',
        templateUrl: 'views/menu.list.html' 
      }
    } 
})
.state('tabs.menu-details', 
  { url: '/menu-details/:menuItemId', 
    views: { 
      'tab-menu': { 
        controller: 'MenuDetailCtrl', 
        templateUrl: 'views/menu.details.html', 
        resolve: { 
          menuItemId: ['$stateParams', function($stateParams) { 
            return $stateParams.menuItemId; 
          }] 
        }
      } 
   } 
})
<input type="number" ng-model="quantity" value="1">
MenuItem.get($stateParams.menuItemId)
    .success(function(data) {
        $scope.menuItem = data;
        $scope.quantity = 1;
});