我的指令看起来像这样:
app.directive('fieldsetCollapse', function() {
return {
restrict: 'A',
scope: {},
compile: function(tElement, tAttrs, transclude) {
var wrapperElement = angular.element('<div ng-show="isOpen"></div>'),
legendElement = tElement.find('legend'),
collapsibleContent = tElement.children().not('legend'),
toggleBtn = angular.element('<a href="#" class="twisty" ng-class="{ true: \'twisty-open\', false: \'twisty-closed\' }[isOpen]" ng-click="toggle()"></a>');
legendElement.css('cursor', 'pointer')
.attr('ng-click', 'toggle()');
tElement.css({
'position': 'relative',
'marginLeft': '20px'
});
tElement.prepend(toggleBtn);
angular.forEach(collapsibleContent, function(obj, i) {
$(obj).remove();
wrapperElement.append(obj);
});
tElement.append(wrapperElement);
return function(scope, element, attrs) {
var directiveValue = (scope.$eval(attrs.gaigCollapsibleFieldset));
scope.isOpen = (directiveValue == undefined) ? true : directiveValue;
scope.toggle = function() {
scope.isOpen = !scope.isOpen;
}
}
}
}
});
哪个适用于此标记:
<fieldset fieldset-collapse> ... </fieldset>
如果我尝试在&lt; fieldset&gt;内添加任何内容比如:
<fieldset fieldset-collapse>{{foo}}</fieldset>
...其中foo是在我的控制器范围内定义的,输出是
{{foo}}
Angular没有编译我在标签与指令之间添加的任何内容。我错过了在我的指令中发生这件事的事情吗?
答案 0 :(得分:2)
您正在指令定义对象
中创建一个独立的范围return {
restrict: 'A',
scope: {} // <--- isolated scope
}
这意味着您的指令无权访问foo
值所在的父作用域。
只是评论出来。 示例http://jsfiddle.net/jaimem/RE7Jj/1/
如果您不希望指令具有对父作用域的完全访问权限,则可以在本地作用域属性foo
和父作用域foo
之间设置双向绑定。文档中的更多详细信息:http://docs.angularjs.org/guide/directive