gpt4 book ai didi

javascript - Angular JS : Insert one directive into another directive dynamically

转载 作者:行者123 更新时间:2023-11-29 21:36:24 26 4
gpt4 key购买 nike

首先,我这样做的方式可能不正确。但我会解释这个问题:

1) 我正在创建名为 的指令

2) 当点击第一个指令中的按钮时,我试图在运行时动态插入第二个指令

如下:

<!DOCTYPE html>
<html>
<script src="lib/angular/angular.js"></script>
<body ng-app="myApp">

<first-directive></first-directive>

<script>
var app = angular.module("myApp", []);
app.directive("firstDirective", function() {
return {
template : '<h1>This is first directive!</h1> <br / ><br / ><button type="button" ng-click="firstCtrl()">Click Me to second directive!</button> <div id="insertSecond"></div> ',
controller: function ($scope) {
$scope.firstCtrl = function($scope) {
angular.element(document.querySelector('#insertSecond')).append('<second-directive></second-directive>');
}
}
}
});

app.directive("secondDirective", function() {
return {
template : '<h1>This is second directive!</h1> <br / ><br / >',
controller: function ($scope) {

}
}
});


</body>
</html>

但它不起作用,我的意思是,它插入的是“ ”文本,而不是上面指令中的内容。

我是 angular js 的新手,我认为我们可以用不同的方式做到这一点,或者我的方法本身是不正确的。但我只想动态插入第二个指令。

EDIT:: 我得到了解决方案,感谢 George Lee:

解决方案是我们必须按如下方式编译,但没有将作用域对象传递给函数:

<!DOCTYPE html>
<html>
<script src="lib/angular/angular.js"></script>
<body ng-app="myApp">

<first-directive></first-directive>

<script>
var app = angular.module("myApp", []);
app.directive("firstDirective", function($compile) {
return {
templateUrl : '<h1>This is first directive!</h1> <br / ><br / ><button type="button" ng-click="firstCtrl()">Click Me to second directive!</button> <div id="insertSecond"></div> ',
controller: function ($scope) {
$scope.firstCtrl = function() {
var ele = $compile('<second-directive></second-directive>')($scope);
angular.element(document.querySelector('#insertSecond')).append(ele);
}
}
}
});

app.directive("firstDirective", function() {
return {
templateUrl : '<h1>This is second directive!</h1> <br / ><br / >',
controller: function ($scope) {

}
}
});

此外,这 link , 很好地解释了如何动态编译和注入(inject)模板。

最佳答案

您可以使用 $compile Angular 中的服务,请确保将其包含在依赖项注入(inject)中。

app.directive("firstDirective", ['$compile', function($compile) {
...
controller: function ($scope) {
$scope.firstCtrl = function() {
var ele = $compile('<second-directive></second-directive>')($scope);
angular.element(document.querySelector('#insertSecond')).append(ele);
}
}

关于javascript - Angular JS : Insert one directive into another directive dynamically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34732189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com