【问题标题】:Angular JS pass attributes to directive templateAngular JS 将属性传递给指令模板
【发布时间】:2015-08-02 19:23:09
【问题描述】:

我有 datepicker 的自定义指令。我想在几个不同的地方重复使用它。但是为了重用当前指令,我必须动态地将不同的属性传递和更改为my-datepicker 指令。

如果您查看 datepicker.html 内部,我正在使用以下属性:ng-model="departureDate" min-date="minDateDeparture" is-open="departureOpened"

问题:如何在 my-datepicker 元素级别设置此属性并一直向下传递到我的指令 html 模板?我想实现这样的目标:

<my-datepicker ng-model="departureDate1" min-date="minDateDeparture1" is-open="departureOpened1"></my-datepicker>

<my-datepicker ng-model="departureDate2" min-date="minDateDeparture2" is-open="departureOpened2"></my-datepicker>

感谢您的帮助!

datepicker-contoller.js

app.directive('myDatepicker', function() {
    return {
        restrict: 'E',
        templateUrl: 'templates/datepicker/datepicker.html'
    };
});

datepicker.html

<fieldset>
    <div class='input-group'>
        <input type="text" class="form-control" datepicker-popup ng-model="departureDate" min-date="minDateDeparture" is-open="departureOpened" datepicker-options="dateOptions" ng-required="true" close-text="Close" />
            <span ng-click="open1($event)" class="btn btn-default input-group-addon">
                <span class="glyphicon glyphicon-calendar"></span>
            </span>
    </div>
</fieldset>

日期选择器使用

    <div ng-controller="MyController">
        <div class="col-md-2">
            <my-datepicker></my-datepicker>
        </div>

        <div class="col-md-2">
            <my-datepicker></my-datepicker>
        </div>
    </div>

【问题讨论】:

标签: angularjs angularjs-directive datepicker angular-ui


【解决方案1】:

更新:查看这个 jsFiddle:http://jsfiddle.net/j31ky7c2/

您可以在指令中将数据和函数作为属性传递。

<my-datepicker min-date="minDateDeparture2" is-open="departureOpened2" some-function="testFunction()"></my-datepicker>

您可以在指令范围内接收此数据。

directive('myDatepicker', [function() {
return {
    restrict: 'E',
    scope: {
        minDate: '@',
        isOpen: '@',
        someFunction: '&'
    },
    link: function(scope, elm, attrs) {
    }
}
}]);

然后您可以在指令模板中简单地使用minDateisOpensomeFunction,例如:

<div ng-bind="{{::minDate}}"></div>
<div ng-bind="{{::isOpen}}"></div>
<Button ng-click="someFunction()">Click me</Button>

【讨论】:

  • 非常感谢您的详细解答!如何将函数名称从元素级别传递给指令? ng-click="open1($event)"
  • 使用scope: { functionName: '&amp;' }
  • @ItamarL。你能给我举个例子,我如何在我的 .html 页面中调用它?
  • @WildGoat,我已经更新了我的答案,包括一个示例,展示如何将函数传递给指令。
  • @pravee-n,我已经完全按照您所说的做了,但不幸的是,在 ng-click 上没有触发任何事件。您能否使用templateUrl.hmtl 模板文件准备JSfiddler 示例?谢谢!
猜你喜欢
  • 2015-10-27
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多