gpt4 book ai didi

javascript - AngularJS 中传递给指令的属性仅更改为指令范围,但不会更改为外部

转载 作者:行者123 更新时间:2023-11-28 20:30:00 26 4
gpt4 key购买 nike

我想使用指令来自定义我的代码。

我创建了一个按钮来切换 Controller 中定义的 isCollapsedUpload 标志:@scope.isCollapsedUpload=false

当用户按下按钮时,isCollapsedUpload 将变为 true,反之亦然,图标也会发生变化。

从 Controller :

$scope.switcher = function (booleanExpr, trueValue, falseValue) {
return booleanExpr ? trueValue : falseValue;
}

$scope.isCollapsedUpload = false;

<button class="btn" ng-click="isCollapsedUpload = !isCollapsedUpload">
<span>Upload file</span>
<i class="{{ switcher( isCollapsedUpload, 'icon-chevron-right', 'icon-chevron-down' )}}"></i>
</button>

我写了这个指令:

feederliteModule.directive('collapseExtend', function() {
return {
restrict: 'E',
scope: { isCollapsed:'@collapseTarget' },
compile: function(element, attrs)
{
var htmlText =
'<button class="btn" ng-click="isCollapsed = !isCollapsed">'+
' <span>'+attrs.label+'</span>'+
' <i class="{{ switcher(isCollapsed, \'icon-chevron-right\', \'icon-chevron-down\' )}}"></i>'+
'</button>';

element.replaceWith(htmlText);
}
}
});

现在我可以像这样使用它:

<collapse-extend 
collapse-target="isCollapsedUpload"
label="Upload file"
></collapse-extend>

这不起作用。图标没有变化。没有错误,

isCollapsedUpload 标志不变。它仅更改为 指令

我错过了什么吗?

最佳答案

类未正确更改的原因是您没有正确链接模板。如果您使用内置功能,这个问题很容易解决:

var feederliteModule = angular.module('feederliteModule', []);
feederliteModule.directive('collapseExtend', [function() {
return {
restrict: 'E',
scope: {
isCollapsed:'=collapseTarget',
label: '@'
},
template: '<button class="btn" ng-click="isCollapsed = !isCollapsed">'+
'<span>{{ label }}</span>'+
'<i ng-class="{ \'icon-chevron-right\': isCollapsed, \'icon-chevron-down\': !isCollapsed }"></i>'+
'</button>'
}
}]);
feederliteModule.controller('test', ['$scope', function($scope) {
$scope.isCollapsedUpload = false;
}]);

据我所知,通过替换父元素,您可以删除该对象所绑定(bind)的隔离范围,而无需在按钮本身上创建新的范围。

关于javascript - AngularJS 中传递给指令的属性仅更改为指令范围,但不会更改为外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16610630/

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