我有一个自定义driective,它用div包装输入并添加标签。
<my-input label="My Label" name="myname" ng-model="mymodel" ng-pattern="/^[a-z]+$/">
我想为输入使用可选的所有可能的角度指令,例如ng-pattern,ng-minlength等。现在看起来像这样:
app.directive('myInput',[function () {
return {
restrict: "E",
replace: true,
scope: {
ngModel: '=',
name: '@',
ngMinlength: '=',
ngMaxlength: '=',
ngPattern: '@',
label: '@'
},
compile: function(element, attrs){
if(!_.isUndefined(attrs['ngMinlength'])) {
element.find('input').attr('ng-minlength', 'ngMinlength');
}
if(!_.isUndefined(attrs['ngMaxlength'])) {
element.find('input').attr('ng-maxlength', 'ngMaxlength');
}
if(!_.isUndefined(attrs['ngPattern'])) {
element.find('input').attr('ng-pattern', attrs['ngPattern']);
}
},
template: '<div class="form-group">'
+ '<label>{{ label | translate }}</label>'
+ '<div>'
+ '<input type="text" class="form-control input-sm" name="{{ name }}" ng-model="ngModel">'
+ '</div></div>'
};
}]);
问题是我想使用与输入中的ng-pattern完全相同的ng-pattern,所以我想有可能在ng-
pattern中使用regexp,并在pattern($scope.mypattern = /^[a-z]+$/; ... ng-pattern="mypattern"
)中使用scope变量。如何处理?
我都想工作:
1。
<my-input label="My Label" name="myname" ng-model="mymodel" ng-pattern="/^[a-z]+$/">
2。
$scope.myPattern = /^[a-z]+$/
...
<my-input label="My Label" name="myname" ng-model="mymodel" ng-pattern="myPattern">
我有三个答案给你。
通常,不建议同时支持模型属性和直接支持字符串。这种情况由=
指令范围内的声明处理,如果要传递String,则可以使用简单的引号。例如ngBind是这样工作的:ng-bind="someModel"
或ng-bind="'some string'"
如果 确实 需要,可以尝试解析表达式。如果它是可解析的,则表示它是作用域模型。否则,可能是字符串。请参见下面的代码片段中的工作示例:
angular.module('test', [])
.controller('test', function($scope) {
$scope.model = "string from scope model";
})
.directive('turlututu', function($parse) {
return {
restrict: 'E',
scope: {},
template: '<div class="tu">{{content}}</div>',
link: function(scope, elem, attrs) {
try {
scope.content = $parse(attrs.text)(scope.$parent);
} catch(err) {
} finally {
if (!scope.content) {
scope.content = attrs.text;
}
}
}
};
});
body { font-family: monospace; }
.tu { padding: 10px; margin: 10px; background: #f5f5f5; border-bottom: 2px solid #e5e5e5; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test" ng-controller="test">
<turlututu text="hardcoded string"></turlututu>
<turlututu text="model"></turlututu>
</div>
/
其视为正则表达式,则将其视为范围模型(请参见下面的示例) angular.module('test', [])
.controller('test', function($scope) {
$scope.model = /[a-z]*/;
})
.directive('turlututu', function($parse) {
return {
restrict: 'E',
scope: {},
template: '<div class="tu">{{content}}</div>',
link: function(scope, elem, attrs) {
if (attrs.regexp.charAt(0) === '/') {
scope.reg = new RegExp( attrs.regexp.substring(1, attrs.regexp.length-1) );
} else {
scope.reg = new RegExp( $parse(attrs.regexp)(scope.$parent) );
}
scope.content = scope.reg.toString()
}
};
});
body { font-family: monospace; }
.tu { padding: 10px; margin: 10px; background: #f5f5f5; border-bottom: 2px solid #e5e5e5; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test" ng-controller="test">
<turlututu regexp="/[0-9]*/"></turlututu>
<turlututu regexp="model"></turlututu>
</div>
创建自定义指令 第一步,创建一个自定义命令类文件,新建application/common/command/Hello.php <?php namespace app\common\command; use think\console\Command; use think\console\Input; use think\console\input\Argument; use think\con
自定义指令可以使用 macro 指令来定义, 这是模板设计者所关心的内容。 Java程序员若不想在模板中实现定义指令,而是在Java语言中实现指令的定义, 这时可以使用 freemarker.template.TemplateDirectiveModel 类来扩展 (请参考 后续章节)。 基本内容 宏是有一个变量名的模板片段。可以在模板中使用宏作为自定义指令, 这样就能进行重复性的工作。例如,创建
我对Lucene是新来的。我试图有自定义属性的令牌。我能够获得分配给令牌的属性。然而,我意识到我们需要为我的每个属性大致有3个文件(接口类扩展属性,类扩展属性Impl和一个类扩展标记过滤器)? 我可能有大约50个属性需要分配。每个属性必须有3个文件吗?这大约是150个文件。
主要内容:实例,实例,钩子,实例,实例除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点: 实例 <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> // 注册一个全局自定义指令 v-focus Vue.d
主要内容:实例,实例,钩子,实例,实例,实例除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点: 实例 <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> const app = Vue.createApp({}