gpt4 book ai didi

javascript - Angularjs 将指令上的所有属性传递给 View

转载 作者:搜寻专家 更新时间:2023-11-01 05:30:17 25 4
gpt4 key购买 nike

我正在构建一个微小的 Angular Directive(指令) <my-input>在普通 HTML 之上 <input> .

因为这将在框架中可用,所以我需要允许人们将他们可能使用的任何属性从指令传递到输入元素。例如:

<my-directive disabled="disabled" type="email">

会渲染

<input disabled="disabled" type="email">

我知道如果我有一个静态的属性列表,我可以手动完成。但问题是我无法预测将添加哪些属性。所以我正在寻找一个通过 所有从指令到输入元素的属性。

谢谢

最佳答案

如果要将多个属性传递给 View ,可以将其执行到链接函数中。

这是你的指令:

指令

(function(){

function myInput($compile) {
return{
restrict: 'E',
templateUrl: 'template.html',
link: function(scope, elm, attrs){

//Convert camelCase to dash
function toDash(str) {
return str.replace(/\W+/g, '-')
.replace(/([a-z\d])([A-Z])/g, '$1-$2');
}

//Retrieve input into the template
var input = angular.element(document.querySelector('#myInput'));

//Loop on attrs
for (var key in attrs) {
if (key[0] !== '$'){
//Remove all attribute to the top level element
elm.removeAttr(toDash(key));

//Add our attribute to the input
input.attr(toDash(key), attrs[key]);

//Compile and link it to the scope
$compile(input)(scope);
}
}

}
};
}

angular
.module('app')
.directive('myInput', myInput);


})();

使用模板:

template.html

<input type="text" id="myInput">

例如,在 Controller 中你可以设置一些变量:

Controller

(function(){

function Controller($scope) {

$scope.show = true;

$scope.toto = 'Hello !!'

}

angular
.module('app', [])
.controller('ctrl', Controller);

})();

然后调用你的指令:

  <body ng-app="app" ng-controller="ctrl">

<my-input disabled="disabled" ng-model="toto" ng-show="show"></my-input>

</body>

因此它将删除 my-input 元素的所有属性,并将其设置到您的模板中。

关于javascript - Angularjs 将指令上的所有属性传递给 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31908934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com