7

尝试将指令添加到具有动态 id 的输入时,链接方法无法正确绑定到对象。给定以下jsfiddle或 html:

<div ng-app="myApp" ng-controller="MyCtrl">
  <p>Date: <input type="text" id="datepicker-{{id}}" datepicker></p>    
</div>

和js:

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

module.directive('datepicker', function() {
  var linker = function(scope, element, attrs) {
    element.datepicker();
  }

  return {
    restrict: 'A',
    link: linker
  }
});

function MyCtrl($scope) {
  $scope.id = 7
}

我在控制台调试器上看到的是,当调用链接时,它的 id 字面意思是“datepicker-{{id}}”而不是“datepicker-7”。

有没有办法强迫这种情况发生?实现这一点的更好方法?

更新:应该已经澄清。单击时会显示日期选择器,但单击日期不起作用。我收到错误:“此日期选择器的未捕获的缺失实例数据”

4

1 回答 1

13

我相信你需要transclude:true在你的指令返回对象中,它告诉 Angular 预处理诸如{{ }}绑定之类的标记。

您还需要将调用包装datepicker()在 a$timeout中以延迟尝试直到下一个角度循环运行,确保在 DOM 中设置了转换后的 ID。

这在jsfiddle中对我有用

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

module.directive('datepicker', function($timeout) {
    var linker = function(scope, element, attrs) {
        $timeout( function(){
            element.datepicker();
        });
    }

    return {
        restrict: 'A',
        link: linker,
        transclude: true
    }
});

function MyCtrl($scope) {
    $scope.id = 7
}
于 2013-11-01T19:31:46.480 回答