AngularJS在加载内容后开始观察

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"> 这正常吗?尝试添加一个标志

我是新来的。 正在尝试创建第一个应用程序,但出现问题。 有一个复选框列表

主要目标是通过选中的复选框计算成本

但在加载页面上我看到警报,如何在加载内容后才开始观看

第二个问题: 让ng在div.上重复,所有repeatet div如

<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);