gpt4 book ai didi

javascript - AngularJS 多个指令在同一元素上,$compile :multidir ERROR

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

这是plunkr: http://plnkr.co/edit/CzcVzKSvpKJTuTKARVJz?p=preview

这是我的简单代码:

.directive('ngB', [function () {
return {
'restrict': 'A',
'scope': {
'ngB': '='
},
'link': function($scope, el) {

var clss = 'b'
, go = function () {

if ($scope.ngB) {

el.removeClass('a');
el.addClass(clss);
} else {
el.removeClass(clss);
}
};

$scope.$watch('ngB', function () {
go();
});
}
};
}])
.directive('ngF', [function () {
return {
'restrict': 'A',
'scope': {
'ngF': '='
},
'link': function($scope, el) {

var clss = 'f'
, go = function () {
if ($scope.ngF) {

el.removeClass('a');
el.addClass(clss);
} else {
el.removeClass(clss);
}
};

$scope.$watch('ngF', function () {
go();
});
}
};
}]);


//view.html
<span ng-b="2 > 1" ng-a="1 > 2">here</span>

它在控制台中返回此错误:https://docs.angularjs.org/error/$compile/multidir

如何在不从 elmeent 中删除其中一个指令的情况下解决此问题

非常感谢。

最佳答案

正如上面所建议的,您不能让两个指令在同一个元素上创建多个作用域,无论是隔离作用域还是子作用域。

您并不总是需要隔离范围。

如果您所做的只是观察属性值的变化:

<span ng-f="{{1 < foo}}"></span>

然后您可以使用 attrs.$observe 获取更改:

link: function(scope, element, attrs){
attrs.$observe("ngF", function(v){
// do something
});
}

但是,如果您正在观察分配给属性或表达式结果的模型值的变化

<span ng-f="foo"></span>
<span ng-f="foo === 10"></span>

在我看来是这种情况,您可以使用 $parse 服务和 $watch 来查看值的变化。

link: function(scope, element, attrs){
var parsed = $parse(attrs.ngF);
scope.$watch(function(){
return parsed(scope);
},
function(v){
// do something
});
}

关于javascript - AngularJS 多个指令在同一元素上,$compile :multidir ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886990/

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