Ghy*_*hal 29 angularjs angularjs-directive
我创建了以下angular指令,在ParentDirective中使用的ChildDirective
var wizardModule = angular.module('Wizard', []);
wizardModule.directive('childDirective', function ($http, $templateCache, $compile, $parse) {
return {
restrict: 'E',
scope: [],
compile: function (iElement, iAttrs, transclude) {
iElement.append('child directive<br />');
}
}
})
wizardModule.directive('parentDirective', function ($http, $compile) {
return {
restrict: 'E',
compile: function (element, attrs) {
var x = '<child-directive></child-directive><child-directive></child-directive>';
element.append(x);
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,出现了几个儿童指令.
我想更新ParentDirective,从服务器获取childDirectives列表.因此,我更新了ParentDirective代码以执行ajax调用,然后绘制ChildDirectives
var elem;
wizardModule.directive('parentDirective', function ($http, $compile) {
return {
restrict: 'E',
compile: function (element, attrs) {
var controllerurl = attrs.controllerurl;
elem = element;
if (controllerurl) {
$http.get(controllerurl + '/GetWizardItems').
success(function (data, status, headers, config) {
var x = '<child-directive></child-directive><child-directive></child-directive>';
elem.append(x);
$compile(x);
});
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
问题是,childDirectives没有出现任何更多的,虽然在debeggur它正在进入到的编译方法childDirective
joa*_*mbl 34
您必须将已编译的元素链接到范围.由于您不再修改模板元素,因此应将新元素附加到链接元素.你可以这样做:
var elem;
wizardModule.directive('parentDirective', function ($http, $compile) {
return {
restrict: 'E',
compile: function (element, attrs) {
var controllerurl = attrs.controllerurl;
elem = element;
if (controllerurl) {
return function(scope,element){
$http.get(controllerurl + '/GetWizardItems').
success(function (data, status, headers, config) {
var x = angular.element('<child-directive></child-directive><child-directive></child-directive>');
element.append(x);
$compile(x)(scope);
});
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)