gpt4 book ai didi

javascript - 将数据传递给指令内部的 ng-repeat 指令

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:13 26 4
gpt4 key购买 nike

当我想要一个显示事物列表的指令时,我总是在 Angular 上撞头,但我希望它足够通用以处理不止一种类型/形状的对象。对于简单的例子,假设我有

<select ng-options="person.id by person in people" ng-model="selectPerson">
<option>
{{person.name}}
</option>
</select>

(请记住,这是一个简单的示例,如此简单的内容可能无法从指令中获益)

现在我想把它变成一个叫做 cool-select 的通用指令我可能会尝试在我的 js 中做这样的事情

//directive coolselect.directive.js
angular.module('mycoolmodule',[]).directive('coolSelect',function(){
return {
restrict:'E',
templateUrl:'js/coolselectdirective/_coolselect.html',//html from example above
scope:{
items:'=',
displayProperty:'@',
idProperty:'@',
selectedItem:'='
},
link:function(scope,element){
//do cool stuff in here
}
}
});

但是这就是我开始在嘴里呕吐的地方

//html template _coolselect.html
<select ng-model="selectedItem" ng-options="item[scope.idProperty] by item in items">
<option>
{{item[scope.displayProperty]}}
</option>
</select>

老实说,我什至不确定这是否适用于 Angular。我已经看到 ui-select 通过使用外部范围做了什么。也许这是要走的路? https://github.com/angular-ui/ui-select/blob/master/dist/select.js#L892

但后来我想我需要像 ui-select 一样喜欢 transclude。有没有更简单的方法?我是否试图对通用指令进行指令?这不是其他人遇到的问题吗?

编辑:最后,它看起来像这样会很理想。

<cool-select repeat="person.id by person in people" display-property="name"></cool-select>

最佳答案

请参阅下面的演示如何将每个对象从数组传递到 ng-repeater 中的指令

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

app.controller('homeCtrl', function($scope) {


$scope.people = [{
name: "John"
}, {
name: "Ted"
}]

});

app.directive('user', function() {

return {

restrict: 'EA',
template: "<p>*name:{{user.name}}</p>",
scope: {
user: '='
},
link: function(scope, element, attr) {

console.log(scope.user);
}
};

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app">
<div ng-controller="homeCtrl">

<div ng-repeat="person in people" user="person"></div>

</div>
</div>

关于javascript - 将数据传递给指令内部的 ng-repeat 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239445/

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