gpt4 book ai didi

javascript - 如何使用 Angular JS 创建可复制的 html 代码

转载 作者:行者123 更新时间:2023-11-28 07:50:06 24 4
gpt4 key购买 nike

我有一个名为“sections”的对象数组。每个对象(节中的节)都有诸如 namecssclass 等属性。例如:

    $scope.sections = [
{ title 'first section', cssclass: 'red'},
{ title: 'second section', cssclass: 'blue'}
];

在任何用户都可以复制的 View 中输出一些 HTML 代码的最佳方式是什么?
举例来说,它准确地输出

<section class="red"> <h1> first section </h1></section>
<section class="blue"> <h1>second section</h1></section>`

依此类推,循环遍历sections数组可能拥有的所有对象。

再次澄清一下,我想要一个文本区域(或类似的东西),其中 html 不会被处理,而是以原始形式显示给用户

最佳答案

人们可以在 $compile 中使用“pass”来随意进行指令处理,然后用 angularJS 生成的 HTML 做任何你想做的事情。此外,必须根据用户对新元素的模型输入提供唯一的范围,这可以通过 $rootScope.$new() 来完成。在下面的示例中,模型格式预计为 JSON,这样就不会爆炸,但如果创建此模型供个人使用,则可以允许简单的 JS 输入并使用 eval(),从而允许用户编写更复杂的模型。

这是在行动:http://jsbin.com/taqoqi/1/

var module = angular.module('module', []);
module.directive('xxAngulizer', function($compile, $rootScope) {
return {
restrict: 'A',
template: '<div>TEMPLATE</div><textarea id="template" ng-model="template" ng-change="update"></textarea>' +
'<div>MODEL</div><textarea id="model" ng-model="model" ng-change="update"></textarea>' +
'<div>HTML OUTPUT</div><textarea id="output" ng-model="output"></textarea>' +
'<div id="hidden" ng-hide="true"></div>',
scope: true,
link: function($scope, elem) {
var templateElem = $(elem.find('#template'));
var modelElem = $(elem.find('#model'));
var outputElem = $(elem.find('#output'));
var hiddenElem = $(elem.find('#hidden'));

$scope.template = '<div ng-repeat="cat in cats">{{cat.name}} the famous {{cat.breed}}</div>';
$scope.model = '{ "cats": [{ "name": "Fussy", "breed": "Russian Blue" },' +
' { "name": "Juniper", "breed": "Maine Coon" },' +
' { "name": "Chives", "breed": "Domestic Shorthair" }] }';
$scope.output = '';
$scope.update = update;

var $magicScope;

function update() {
var model, template;
try {
model = JSON.parse($scope.model);
} catch (err) {
model = null;
$scope.output = 'Model is not valid JSON.';
}
if (model) {
try {
template = $($scope.template);
} catch (err) {
console.log(err);
template = null;
$scope.output = 'Template is not valid(ish) HTML.';
}
}
if (template) {
if ($magicScope) { $magicScope.$destroy(); }
$magicScope = $rootScope.$new(true);
for (var p in model) {
$magicScope[p] = model[p];
}
//$scope.$apply(function() {
$compile(hiddenElem.html(template))($magicScope);
//});
//$scope.$apply(function(){
// $scope.output = hiddenElem.html();
//});
setTimeout(function(){
$scope.output = hiddenElem.html();
$scope.$apply();
}, 500);
}
}

$scope.$watch('template', update);
$scope.$watch('model', update);
setTimeout(update, 500);
}
};
});
<!DOCTYPE html>
<html>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<body ng-app="module">
<div xx-angulizer></div>
</body>
</html>

希望这有帮助!

关于javascript - 如何使用 Angular JS 创建可复制的 html 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26949527/

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