<div ng-app="HelloApp" ng-controller="HelloController"> <h1>自定义指令</h1> <time-duration ng-model="test"></time-duration> <h1> 默认指令</h1> <input ng-model="test">second </div>
angular.module('HelloApp', [])
.directive('timeDuration', TimeDurationDirective);
.controller('HelloController', function($scope) {
$scope.test = 1;
});
<div class="time-duration"> <input ng-model='num'> <select ng-model='unit'> <option value="seconds">Seconds</option> <option value="minutes">Minutes</option> <option value="hours">Hours</option> <option value="days">Days</option> </select> </div>
function TimeDurationDirective() {
var tpl = '....'; // 指令模板代码就是上面的内容,这里就不复制了。
return {
restrict: 'E',
replace: true,
template: tpl,
require: 'ngModel',
scope: {},
link: function(scope, element, attrs, ngModelController) {
var multiplierMap = {
seconds: 1,
minutes: 60,
hours: 3600,
days: 86400
};
var multiplierTypes = ['seconds', 'minutes', 'hours', 'days'];
// TODO
}
};
}
return {
require: '^ngModel'
}
return {
require: '?ngModel'
}
return {
require: '?^ngModel'
}
<my-directive ng-model="my-model"> <other-directive></other-directive> </my-directive>
link: function (scope, element, attrs, ngModelCtrl) {
// TODO
}
// $formatters接受一个数组
// 数组是一系列方法,用于将modelValue转化成viewValue
ngModelController.$formatters.push(function(modelValue) {
var unit = 'minutes', num = 0, i, unitName;
modelValue = parseInt(modelValue || 0);
for (i = multiplierTypes.length-1; i >= 0; i--) {
unitName = multiplierTypes[i];
if (modelValue % multiplierMap[unitName] === 0) {
unit = unitName;
break;
}
}
if (modelValue) {
num = modelValue / multiplierMap[unit];
}
return {
unit: unit,
num: num
};
});
// $render用于将viewValue渲染到指令的模板中
ngModelController.$render = function() {
scope.unit = ngModelCtrl.$viewValue.unit;
scope.num = ngModelCtrl.$viewValue.num;
};
scope.$watch('unit + num', function() {
// $setViewValue用于更新viewValue
ngModelController.$setViewValue({
unit: scope.unit,
num: scope.num
});
});
// $parsers接受一个数组
// 数组是一系列方法,用于将viewValue转化成modelValue
ngModelController.$parsers.push(function(viewValue) {
var unit = viewValue.unit;
var num = viewValue.num;
var multiplier;
multiplier = multiplierMap[unit];
return num * multiplier;
});
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有