gpt4 book ai didi

javascript - 为基于作用域变量的 Angular 指令提供模板

转载 作者:行者123 更新时间:2023-11-28 06:32:21 25 4
gpt4 key购买 nike

我是 Angular 的新手,我需要使用 svg 文件的可选部分来实现交互式 map 。

这是我的 Controller ,以及整个 svg map 和部分区域的指令。

ColorPicker Controller

app.controller("ColorPicker", function($scope, $timeout, appConfig) {
$scope.colors = [];
$scope.currentColorSet = 0;
$scope.svgTemplateUrl = appConfig.arSvg[$scope.$parent.roomType.id][$scope.$parent.roomStyle.id]+'over.svg'

$scope.alertColor = function(color) {
console.log(color);
}


});

map 指令

app.directive('svgMap', ['$compile', function ($compile) {
return {
restrict: 'A',
templateUrl: 'models/livingrooms/Livingroom_01/over.svg',
link: function (scope, element, attrs) {

var svg = $(element).find('svg');
svg.removeAttr('xmlns:a');
svg.attr('width', '869px');
svg.attr('height', '489px');
element.append(svg);

var regions = element[0].querySelectorAll('path');

angular.forEach(regions, function (path, key) {
var regionElement = angular.element(path);
regionElement.attr("region", "");
$compile(regionElement)(scope);
});
},
}
}]);

区域指令

app.directive('region', ['$compile', function ($compile) {
return {
restrict: 'A',
scope: true,
link: function (scope, element, attrs) {
scope.elementId = element.attr("id");
scope.stroke = '';
scope.regionClick = function () {
console.log(scope.elementId);
};
scope.setStroke = function () {
scope.stroke = '#e5514e';
};
scope.removeStroke = function () {
scope.stroke = '';
};
element.attr("ng-click", "regionClick()");
element.attr("ng-attr-stroke", "{{stroke}}");
element.attr("ng-mouseenter", "setStroke()");
element.attr("ng-mouseleave", "removeStroke()");
element.removeAttr("region");
$compile(element)(scope);
}
}
}]);

我需要的是动态加载 SVG 文件作为模板并根据范围变量 $scope.svgTemplateUrl 编译它及其所有区域

如果 templateUrl 是常量字符串,现在一切正常,如何使其动态?

最佳答案

好的,如果您想动态加载templateUrl,那么可以通过向其传递回调来完成。

templateUrl: function(element,attrs) {
return attrs.templateUrl;
}

现在使用该指令时-

<svgMap template-url="models/livingrooms/Livingroom_01/over.svg"><svgMap>

另一种方法是定义一个范围指令,例如

app.directive('svgMap', ['$compile', function ($compile) {
return {
restrict: 'A',
scope: {
templatecontenturl: '='
},
templateUrl: templatecontenturl,
link: function (scope, element, attrs) {

},
}
}]);

像这样使用

<svgMap templatecontenturl="svgTemplateUrl"><svgMap>

请参阅http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-2-isolate-scope关于指令之间传递的作用域变量。

关于javascript - 为基于作用域变量的 Angular 指令提供模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34595265/

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