将值推入$ scope内的数组返回undefined

时间:2015-01-21 16:54:43

标签: angularjs

好的......我现在觉得自己真的很蠢。请忽略我的问题。这个例子在fiddler中起作用,所以它确实是其他地方的问题。我本来想尝试解决这个问题。谢谢。修复了它...我上面有一行代码,使用$ resource服务创建一个新的$ scope.group对象,它取代了原来的$ scope.group.admin。我稍后会删除此问题

JsFiddler:http://jsfiddle.net/ovLzwez7/

我会稍微修改一下我的问题,因为这是一个范围问题。

在我的控制器中,我有这些

$scope.group = {}
$scope.group.admin = [7,8];

//Works
console.log($scope.group.admin)  //[7,8]
$scope.group.admin.push(7);
console.log($scope.group.admin) //[7,8,7]

//Doesn't work
$scope.createGroup = function(){
   console.log($scope.group.admin) //undefined   
   $scope.group.admin.push(7);
  //TypeError: Cannot read property 'push' of undefined
  console.log($scope.group.admin) //doesn't print to output, program ends because of the error above

}

$scope.createGroup();

在加载控制器时立即调用createGroup。它看起来像在createGroup()中,$ scope.group.admin不是数组(未定义)。有人可以解释这个范围问题以及我如何克服这个问题?在这个例子中,(抱歉突然改变),我没有操纵任何html,我只是使用console.log和一个即时加载的函数。我认为$ scope是一个单例。那么它不应该引用相同的$ scope吗?

2 个答案:

答案 0 :(得分:0)

你应该使用ng-keypress指令来触发绑定到范围的角度方法。

<input name="username" ng-keypress="createGroup($event)">

$scope.createGroup = function(event){

  if(e.which === 13) {
     $scope.addAdmin(7234)
  }

}

答案 1 :(得分:0)

下面的代码是$ scope.apply它是简单的javascript代码,它不符合角度标准,因此您需要使用ng-keypress或使用$ scope.apply()函数使其工作。

     addAdmin.addEventListener('keyup', function(e){

          // If the key enter pressed (13) then add to list
          if(e.keyCode === 13) {
             $scope.addAdmin(7234)
          }
         })
      }

如何使用$ scope。$ apply(): -

 addAdmin.addEventListener('keyup', function(e){

          // If the key enter pressed (13) then add to list
          if(e.keyCode === 13) {
            $scope.apply(function(){
               $scope.addAdmin(7234)
             }
          });
         })
      }