ищите переменную в angularjs, независимо от того, пуста она или нет - PullRequest
0 голосов
/ 05 июля 2018

Я хочу вызвать функцию, если переменная в области видимости существует. Я использую:

$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 ]

0 голосов
/ 05 июля 2018

Нет необходимости использовать $ 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-модель для <input type="file"/> (с директивой DEMO) .

0 голосов
/ 05 июля 2018

вы неправильно поняли концепцию $watch, я объясню:

Прежде всего, AngularJS определяет концепцию так называемого дайджеста. цикл. Этот цикл можно рассматривать как цикл, во время которого AngularJS проверяет, есть ли какие-либо изменения во всех переменных, наблюдаемых всеми $ областей. Так что, если у вас есть $ scope.myVar, определенный в вашем контроллере и эта переменная была помечена для просмотра, то вы неявно приказывая AngularJS отслеживать изменения в myVar в каждом итерация цикла.

Естественным последующим вопросом будет: все ли прикреплено к $ сфера, за которой следят? К счастью, нет. Если бы вы следили за изменениями к каждому объекту в вашей области видимости $, тогда бы цикл дайджеста возраст, чтобы оценить, и вы быстро столкнетесь с проблемами производительности. Вот почему команда AngularJS дала нам два способа объявить некоторые Переменная $ scope отслеживается (читайте ниже).

$ watch помогает прослушивать изменения в области $

Существует два способа объявления переменной $ 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...