【问题标题】:Check if an object has a property [duplicate]检查对象是否具有属性[重复]
【发布时间】:2013-12-26 05:15:24
【问题描述】:

如何在 AngularJS 中检查对象是否具有特定属性?

【问题讨论】:

  • 如果您不知道属性的名称,那么您可以简单地检查 Object.keys(objName).length。我希望这会有所帮助。

标签: angularjs object


【解决方案1】:

您可以使用 'hasOwnProperty' 来检查对象是否具有特定的 属性。

if($scope.test.hasOwnProperty('bye')){
  // do this   
}else{
  // do this then
}

这是 jsFiddle 中的 demo

希望这有帮助。

【讨论】:

  • 我通过指令(使用'=')传递对象,在我的指令控制器中我有这个代码sn-p用于初始化,但我得到TypeError:无法调用未定义的方法'hasOwnProperty'。你知道为什么吗?
  • @user2985439:听起来你的对象没有test的属性。
  • @user2985439 正如 Felix Kling 所提到的,您的指令引用的对象没有“测试”属性。您能否更新您的问题以获取更多详细信息?
  • scope: {test:'='},controller($scope) {if($scope.test.hasOwnProperty('bye')) {// do stuff}} 这会返回类型错误.我知道测试已定义,因为我在视图中直接通过了它...
  • 好的,我更新了我的问题。
【解决方案2】:
if('bye' in $scope.test) {}
else {}

【讨论】:

    【解决方案3】:

    问题在于,您可能不仅在链接指令时会有价值 - 例如,它可以由 $http 加载。

    我的建议是:

    controller: function($scope) {
      $scope.$watch('test.hello', function(nv){ 
         if (!nv) return; 
         // nv has the value of test.hello. You can do whatever you want and this code
         // would be called each time value of 'hello' change
      });
    }
    

    或者如果您知道该值只分配了一个:

    controller: function($scope) {
      var removeWatcher = $scope.$watch('test.hello', function(nv){ 
         if (!nv) return; 
         // nv has the value of test.hello. You can do whatever you want
         removeWatcher();
      });
    }
    

    此代码将删除观察者分配的“test.hello”值(来自任何控制器、ajax 等)

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 2017-10-09
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 2017-01-09
      • 2015-08-24
      相关资源
      最近更新 更多