【问题标题】:Angular directive not getting called when scope is updated更新范围时未调用Angular指令
【发布时间】:2016-02-06 16:19:33
【问题描述】:

我有一个正在修改变量的作用域:

$scope.showContext = function(context) {
        $scope.currentContext = context;
....
}

我在页面上有一个指令:

<div org-chart workflow="currentContext" />

我有一个指令:

var OrgChartDirective = function($timeout) {
    return {
        restrict : 'AE',
        scope : {
            workflow : '=',
        },
        link : function(scope, element, attrs) {


            if (scope.workflow != null) {
                console.log("**________________________________**");
                console.log(scope);
            } else {
                alert("Workflow is null");
            }
      ....

当我加载页面时,我收到工作流程为空的警报。

当我运行更新$scope.currentContext 的范围函数时,没有其他任何事情发生。应该再调用一次吧?

编辑说:我在页面上有这个,它确实表明在我调用范围方法后变量正在设置:

工作流----> {{currentContext.workflow}}

【问题讨论】:

  • 你能显示指令代码吗?
  • 它在那里,格式错误
  • 在指令中使用监视或创建从控制器广播到指令的事件以通知范围更改。你想对link 中的workflow 做什么??

标签: javascript angularjs


【解决方案1】:

您必须像这样观察/观察链接函数中的属性变化:

attrs.$watch('workflow', function() {
    //do whatever logic you want
});

在此处阅读有关观察者和观察者以及如何使用它们的更多信息: Ben naddal tutorial on observers and watchers

试试这个要点:Gist for observers and watchers

【讨论】:

  • 那么,范围“=”(以及“&”和“@”)的意义是什么?我认为这是为了保持两个范围之间的数据同步(无论如何,对于“=”)。您是说它会保持更新,但在“父”或“原始”范围内发生更改时不会重新运行指令?
  • 您必须注意变化。看看我给出的要点链接。这将帮助您更好地理解。
【解决方案2】:

遵循 charlietfi,尝试使用观察者

link : function(scope, element, attrs) {
  scope.$watch('workflow', function(val) {
  ...
  });

【讨论】:

  • OP 正在使用隔离作用域,$watch 在作用域上会更有意义。属性不会改变
猜你喜欢
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 2016-02-06
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多