Javascript 在指令中使用工厂
在检查有效性时,我无法从指令中获取值 我的app.js如下所示: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
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;
});