Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 范围变量更改后重新评估传递给指令的属性_Javascript_Angularjs_Angularjs Directive_Angularjs Ng Repeat - Fatal编程技术网

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}

我做了一次编辑,也包括了指令谢谢,做了一次编辑,
工具提示
是传递给指令的属性,我不能使用隔离范围。顺便说一下,使用此方法不会计算工具提示中传递的表达式对不起,您的解决方案似乎都不适合我。要一劳永逸地理解如何管理传递给指令的参数并不容易。。