AngularJS在加载内容后开始观察
我是新来的。 正在尝试创建第一个应用程序,但出现问题。 有一个复选框列表 主要目标是通过选中的复选框计算成本 但在加载页面上我看到警报,如何在加载内容后才开始观看 第二个问题: 让ng在div.上重复,所有repeatet div如AngularJS在加载内容后开始观察,angularjs,Angularjs,我是新来的。 正在尝试创建第一个应用程序,但出现问题。 有一个复选框列表 主要目标是通过选中的复选框计算成本 但在加载页面上我看到警报,如何在加载内容后才开始观看 第二个问题: 让ng在div.上重复,所有repeatet div如 <div class="order-box row-fluid ng-scope ng-pristine ng-valid" ng-repeat="order in orders" ng-model="orders"> 这正常吗?尝试添加一个标志
<div class="order-box row-fluid ng-scope ng-pristine ng-valid" ng-repeat="order in orders" ng-model="orders">
这正常吗?尝试添加一个标志,或者在JSFIDLE上尝试
订单
。为了避免这种情况,您可以检查oldVal
是否为空数组选择的属性;并非订单的所有属性李>
手表应该比较数值,而不是实例;因此,$watch
以下是具有自定义监视功能的代码:
// watch only order.selected
var watch = function(o) {
var mapped = _.map(o.orders, function(o){
return o.selected || false;
});
return mapped;
};
var firstWatch = true;
$scope.$watch(watch, function(newVal, oldVal) {
if ( firstWatch || oldVal.length === 0 ) {
firstWatch = false;
return;
}
console.log('changed', newVal, oldVal);
}, true);
请参见此示例:。在您实际检查某个项目之前,控制台上不会记录任何内容。我知道。但它在加载页面2次之前显示allert(我有10多个复选框,但在开始时只显示2个),然后单击复选框。也许你可以在jsfiddle.net上发布你的代码,我可以看一下。我不知道在fiddle上粘贴代码有多正确,但是link:Looking that,i make it=)但是在jsfiddle中,开始时没有弹出窗口。如何仅监视数组,并仅获取1个选定元素?在代码中,它会在2秒内重置复选框。我理解你的想法。我更新了主要问题,你能回答吗?也许它可以改变html/模型吗?重复行如何?ReferenceError:u未定义为Angular.isDefined(oldVal)&&oldVal.length==0以避免错误
<div class="order-box row-fluid ng-scope ng-pristine ng-valid" ng-repeat="order in orders" ng-model="orders">
function OrdersCtrl($scope, $timeout) {
$scope.orders = [];
var first = true; //this doesn't belong to any scope, it will be deallocated after the current cycle.
var ajax = function () {
$scope.orders = [{
id: 1,
selected: true
}, {
id: 2,
selected: true
}, {
id: 3,
selected: true
}, {
id: 4,
selected: true
}];
};
$scope.$watch('orders', function (n, o) {
if (first) {
$timeout(ajax, 2000); //simulate the ajax call. Assume data comes back in 2 seconds.
} else {
alert(n);
}
});
}
// watch only order.selected
var watch = function(o) {
var mapped = _.map(o.orders, function(o){
return o.selected || false;
});
return mapped;
};
var firstWatch = true;
$scope.$watch(watch, function(newVal, oldVal) {
if ( firstWatch || oldVal.length === 0 ) {
firstWatch = false;
return;
}
console.log('changed', newVal, oldVal);
}, true);