代码之家  ›  专栏  ›  技术社区  ›  Adesh Kumar

在angularjs中查找变量是否为空

  •  0
  • Adesh Kumar  · 技术社区  · 8 年前

    如果范围内存在变量,我想调用函数。我正在使用:

    $scope.$watch('product_files', function () {
       $scope.uploadNewProduct($scope.product_files);
    });
    $scope.uploadNewProduct=function(files){
    console.log("hello");
      if(files && files.length){
        console.log("hello");
      }
    }
    

    $scope.product_files 是一个带有任何扩展名的文件,我正在使用输入上载它 type=file 但每次它出现 undefined 是的。

    我从没用过 $scope.watch 不知道我做的对不对。请随便。

    2 回复  |  直到 8 年前
        1
  •  3
  •   georgeawg    8 年前

    不需要使用$watch,而是使用 ng-change 带有文件选择器的指令:

    <input type="file" select-ng-files ng-model="product_files"
           ng-change="upLoadNewProduct(product_files)" />
    
    app.directive("selectNgFiles", function() {
      return {
        require: "ngModel",
        link: function postLink(scope,elem,attrs,ngModel) {
          elem.on("change", function(e) {
            var files = elem[0].files;
            ngModel.$setViewValue(files);
          })
        }
      }
    });
    
    $scope.uploadNewProduct=function(files) {
      if(files && files.length){
        console.log("hello");
      }
    }
    

    有关详细信息,请参见 ng-model for <input type="file"/ > (with directive DEMO) 是的。

        2
  •  1
  •   Barr J    8 年前

    你误解了 $watch ,我会解释:

    首先,angularjs定义了所谓摘要的概念 循环。这个循环可以看作是一个循环,在这个循环中,angularjs 检查所有监视的所有变量是否有任何更改 $scopes。所以如果你的控制器中定义了$scope.myvar 这个变量被标记为被监视,那么 隐式地告诉angularjs监视每个 循环的迭代。

    一个自然而然的后续问题是:一切都依附于 $scope被监视?幸运的是,没有。如果你能留意变化 对于$scope中的每个对象,一个摘要循环很快就会 评估的年龄和你会很快遇到性能问题。 这就是为什么Angularjs团队给了我们两种方法来声明 $scope变量被监视(如下所示)。

    $watch有助于监听$scope更改

    有两种方法可以将$scope变量声明为被监视

    意思是$watch不会告诉您变量是否为空,而是告诉您变量是否已更改。

    例如:

    unction MyController($scope) {
    
        $scope.myVar = 1;
    
        $scope.$watch('myVar', function() {
            alert('hey, myVar has changed!');
        });
    
        $scope.buttonClicked = function() {
            $scope.myVar = 2; // This will trigger $watch expression to kick in
        };
    }
    

    如果要检查变量是否存在,请创建一个函数:

    $scope.isNullOrEmptyOrUndefined = function (value) {
        return !value;
    }
    

    然后像这样检查(例如):

    if($scope.isNullOrEmptyOrUndefined(product_files) {
     //your logic
    }