我們有以下指令:
.directive("directiveToggleElement", function(FlagsService) {
return {
restrict: "E",
scope: {},
link: function(scope, element, attrs)
{
scope.showMe = FlagsService.isOn(attrs.toggleKey);
scope.featureText = attrs.featureText;
var htmlTag = '<div class="panel ng-scope" ng-class="{selected: selected}" ng-click="selected = !selected;"></div>';
var htmlComment = '<!-- TogglePlaceholder: ' + attrs.toggleKey +'-->';
element.replaceWith(scope.showMe ? htmlComment + htmlTag : htmlComment);
// Listen for change broadcast from flagsservice to toggle local store
scope.$on('LocalStorage.ToggleChangeEvent.' + attrs.toggleKey, function(event, parameters) {
console.log('stuff changed - ' + parameters.key + ' ' + parameters.newValue);
scope.showMe = parameters.newValue;
element.replaceWith(scope.showMe ? htmlComment + htmlTag : htmlComment);
});
}
}
})
的想法是,基於特徵切換(或功能標誌)的值,該指令將輸出評論標籤,或只是評論。
最初的element.replaceWith按預期工作,但在範圍。$ on內的調用會生成「TypeError:Can not call method'nullChild'。我們在每次通話前都檢查過元素,無法發現明顯的差異。
任何人都可以解釋爲什麼會在這裏拋出錯誤,或建議一個潛在的解決方法,這將允許我們做同樣的事情?
我們有規定的NG-顯示值工作指令:
.directive("directiveToggle", function(FlagsService) {
return {
restrict: "A",
transclude: true,
scope: {},
link: function(scope, element, attrs)
{
scope.showMe = FlagsService.isOn(attrs.toggleKey);
// Listen for change broadcast from flagsservice to toggle local store
scope.$on('LocalStorage.ToggleChangeEvent.' + attrs.toggleKey, function(event, parameters) {
console.log('stuff changed - ' + parameters.key + ' ' + parameters.newValue);
scope.showMe = parameters.newValue;
});
},
template: '<div class="panel ng-scope" ng-show="showMe" ng-class="{selected: selected}" ng-click="selected = !selected;"><span ng-transclude></span></div>',
replace: true
}
})
但我們寧願從DOM,而不是設置顯示爲none刪除的元素。
我只需要將它從DOM中刪除,爲什麼不使用'ngIf' ?.請提供一名運動員。 –
嗨@Ilan,儘管ngIf會(並且確實)工作,但我們故意避免讓我們的控制器調用flagsservice - 我將創建一個在線演示工作 – kevinawalker