Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在指令中使用工厂_Javascript_Angularjs_Factory_Directive - Fatal编程技术网

Javascript 在指令中使用工厂

Javascript 在指令中使用工厂,javascript,angularjs,factory,directive,Javascript,Angularjs,Factory,Directive,在检查有效性时,我无法从指令中获取值 我的app.js如下所示: var app = angular.module('angularjs-starter', []); app.controller('MainCtrl', function($scope) { $scope.doSomething = function () { alert('Submitted!'); } }); app.directive('imgExist', function (ImgChck){ return

在检查有效性时,我无法从指令中获取值

我的app.js如下所示:

var app = angular.module('angularjs-starter', []);

app.controller('MainCtrl', function($scope) {
$scope.doSomething = function () { 
alert('Submitted!');
}
});


app.directive('imgExist', function (ImgChck){ 
return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, elem, attr, ctrl) {
        ctrl.$parsers.unshift(function(value) {
          ImgChck.isImage(value).then(function(result) {
            ctrl.$setValidity('imgexist', true);
            return 'http://cdn1.imgs.bigtitinvasion.com/t1/episodes/shylastylez/shyla-big-tit-slut-big3.jpg'; //value
          },
          function(result) {
            ctrl.$setValidity('imgexist', false);
            return undefined;
          });
        });
    }
};
});

app.factory('ImgChck', function($q) {
return {
  isImage: function(src) {

      var deferred = $q.defer();

      var image = new Image();
      image.onerror = function() {
          deferred.resolve(false);
      };
      image.onload = function() {
          deferred.resolve(true);
      };
      image.src = src;

      return deferred.promise;
  }
};
});
普朗克:

如果在输入中写入内容,则输出值{{data.fruitName}}始终为空。

指令 工厂 Plunker

app.directive('imgExist', function(ImgChck) {
  return {
    restrict: 'A',
    require: 'ngModel',
    scope: {
      model: '=ngModel'
    },
    link: function(scope, elem, attr, ctrl) {
      if (!ctrl) return;

      scope.$watch("model", function(value) {
        ImgChck.isImage(value).then(function(result) {
          ctrl.$setValidity('imgexist', true);
          return value;
        }).
        catch(function() {
          ctrl.$setValidity('imgexist', false);
          return value;
        });
      });

    }
  };
});
app.factory('ImgChck', function($q) {
  var ImgChck = {};

  ImgChck.isImage = function(src) {
    var deferred = $q.defer();
    var image = new Image();

    image.onerror = function() {
      deferred.reject(false);
    };

    image.onload = function() {
      deferred.resolve(image);
    };

    image.src = src;

    return deferred.promise;
  }

  return ImgChck;
});