从指令返回变量而不是暴露示波器
在下面的代码中,我有一个指令,每次输入字段x被更改时计算变量y。变量y已公开,因此可用于声明控制器/指令。这工作正常,但它是一个简单的抽象,在我真实的情况下,y的计算是非常昂贵的,所以我不能计算y每次x更改。理想情况下,只有在声明控制器/指令需要时才会计算y。有没有办法实现这一点?从指令返回变量而不是暴露示波器
var app = angular.module('app', []); app.controller('ctl', function() { 
}); 
app.directive("theDirective", function() { 
     return { 
     restrict: "AE", 
     scope: { 
      y: '=' 
     }, 
     template: '<input ng-model="x" ng-change="xChanged()" />', 
     link: function (scope, element, attrs) { 
      scope.xChanged = function() { 
       scope.y = scope.x * 2; 
      }; 
     } 
    } 
}); 
回答:
如果从该指令的孩子需要这样的数据,你可以在你的指令控制器暴露的方法,然后露出孩子指令可能要求的方法做到这一点。
app.directive("theDirective", function() {     return { 
    restrict: "AE", 
    scope: { 
     y: '=' 
    }, 
    template: '<input ng-model="x" ng-change="xChanged()" />', 
    controller: function (scope) { 
     scope.getY = function() { 
      return scope.x * 2; 
     }; 
    } 
} 
}); 
然后你的孩子可以要求父母可以调用该方法。
app.directive("theDirectiveChild", function() {     return { 
    restrict: "A", 
    require: ["^theDirective"], 
    link: function(scope, element, attrs, ctrls){ 
     var theDirective = ctrls[0]; 
     var y = theDirective.getY(); 
    } 
} 
}); 
编辑:反其道而行之,在您想要的家长告诉孩子进行更新,你可以利用$ scope.broadcast()这可以触发一个消息下来作用域链,它会看起来像这个。
app.directive("theDirective", function() {     return { 
    restrict: "AE", 
    scope: { 
     y: '=' 
    }, 
    template: '<input ng-model="x" ng-change="xChanged()" />', 
    link: function (scope) { 
     scope.on('update-the-directive' , function() { 
      scope.y = scope.x * 2; 
     }); 
    } 
} 
}); 
然后你的孩子可以要求父母可以调用该方法。
app.directive("theDirectiveParent", function() {     return { 
    restrict: "A", 
    link: function(scope, element){ 
     scope.click = function() { 
     scope.$broadcast('update-the-directive'); 
     } 
    } 
} 
}); 
以上是 从指令返回变量而不是暴露示波器 的全部内容, 来源链接: utcz.com/qa/264329.html







