我在这里要做的是创建一个指令,允许我设置仅适用于我正在呈现的 html 标记内的临时变量。用例是这样的:
<div class="input-group" ng-local="opened = false" ng-blur="opened = false;">
<input type="text" class="form-control" uib-datepicker-popup="longDate" ng-model="start" is-open="opened" ng-focus="opened = true;" />
<span class="input-group-btn">
<button type="button" ng-click="opened = true;" class="fa fa-calendar" ></button>
</span>
</div>
这里的想法是 ng-local 指令创建一个变量opened
并将该变量设置为初始值false
。指令中的所有内容都是一个嵌入的模板。这里的好处是我可以在一个页面上拥有多个日期选择器,所有使用相同变量的人opened
都无需在控制器的范围内拥有一堆不同的变量,这些变量仅用作内部内容的临时变量分区。但是,由于这将以多种不同的方式使用,我不想为每个用例制定不同的指令。
我在这方面的第一次尝试非常顺利。但是,我遇到了一个问题,start
即没有从 datepicker 正确访问父范围变量。我对 $transclude 功能不是很熟悉,所以我希望有人能指出我正确的方向。这是我目前编写的指令:
(function () {
angular.module('myApp').directive('ngLocal', [function () {
return {
restrict: 'A',
transclude: 'element',
replace: false,
scope: {
ngLocal: '@'
},
link: function ngLocalLink(directiveScope, element, attrs, ctrl, $transclude) {
$transclude(directiveScope, function ngLocalTransclude(clone, scope) {
element.empty();
element.replaceWith(clone);
scope.$eval(directiveScope.ngLocal);
});
}
};
}]);
})();
提前致谢!
编辑
这是一个plunkr链接