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()
是我控制器中的一个工件。请不要理会@akonsumaybequantity
是在子作用域上创建的?更好的方法是使用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;
});