Javascript 范围变量更改后重新评估传递给指令的属性
我在Javascript 范围变量更改后重新评估传递给指令的属性,javascript,angularjs,angularjs-directive,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我在ng repeat中生成了一系列元素: <tr ng-repeat="index in elements"> <td ng-click="doSomething(index)" my-tooltip tooltip="isInBasket(index.id) && 'REMOVE FROM BASKET' || 'ADD TO BASKET'" ></td> </tr> 现在,我的代码的其他部分将更改$scope.bask
ng repeat
中生成了一系列元素:
<tr ng-repeat="index in elements">
<td ng-click="doSomething(index)" my-tooltip tooltip="isInBasket(index.id) && 'REMOVE FROM BASKET' || 'ADD TO BASKET'" ></td>
</tr>
现在,我的代码的其他部分将更改$scope.basket
,因此我认为只要$scope.basket
更改,就会重新计算isInBasket
,从而更改传递给工具提示
属性的值
指令
angular.module("tooltips", [])
.directive("myTooltip", ($parse, $rootScope, $state){
return {
restrict: 'A',
priority: 999,
link: function(scope, elm, attrs) {
tooltip = scope.$eval(attrs.tooltip);
// ....
}
}
})
但这不起作用,我很确定我做错了什么,或者我遗漏了什么。您正在创建一个独立的作用域吗?如果是,则需要在您的作用域中声明: { 工具提示:'&' } 我认为问题在于,您绑定到的是布尔值,as not permuttable会破坏双重绑定,但老实说,不确定您是如何执行tooltip指令的
angular.module("tooltips", [])
.directive("myTooltip", ($parse, $rootScope, $state){
return {
restrict: 'A',
priority: 999,
link: function(scope, elm, attrs) {
tooltip = scope.$eval(attrs.tooltip);
// ....
}
}
})
试试你的指令:
angular.module("tooltips", [])
.directive("myTooltip", ($parse, $rootScope, $state){
return {
scope: { tooltip: "=" } //you could try also "&"
restrict: 'A',
priority: 999
}
})
好的,如果您尝试指定如下值:
var tooltip = {dock: scope.$eval(attrs.tooltip)};
或
var tooltip=element.scope()[attrs.tootip]
我的意思是,我知道在绑定中,对一个对象进行绑定是非常重要的
如果这对你没有帮助,你可以用手表把它绑起来,这样就可以了:
link: function(scope, elm, attrs) {
var tooltip = element.scope()[attrs.tootip];
scope.$watch(function () {
return scope.attrs.tooltip; // i dont know what changes in your app
}, function() {
return tooltip();
}, true);
使用tooltip=“{isInBasket(index.id)&&&“从篮子中删除”| |“添加到篮子”}”
请看下面
var-app=angular.module('plunker',['ui.bootstrap']);
应用程序控制器('MainCtrl',函数($scope){
$scope.name='World';
$scope.elements=[{
id:0,
名称:“香蕉”
}, {
id:1,
名字:“梨”
}, {
id:2,
名称:“苹果”
}]
$scope.basket=[];
$scope.basket.push($scope.elements[0].id)
$scope.isInBasket=函数(id){
返回包含($scope.basket,id)
}
$scope.doSomething=功能(项目){
如果(u.contains($scope.basket,item.id)){
$scope.basket=\不带($scope.basket,item.id)
}否则{
$scope.basket.push(item.id)
}
}
});代码>
tr{
边框:1px纯灰;
}
安古拉斯普朗克
文件。写(“”);
你好{{name}}!
篮子:{{Basket | json}}
{{index.id}
我做了一次编辑,也包括了指令谢谢,做了一次编辑,工具提示
是传递给指令的属性,我不能使用隔离范围。顺便说一下,使用此方法不会计算工具提示中传递的表达式对不起,您的解决方案似乎都不适合我。要一劳永逸地理解如何管理传递给指令的参数并不容易。。