当前位置: 首页 > 面试题库 >

如何在AngularJS中的两个指令之间共享作用域?

能修谨
2023-03-14
问题内容

我想$scope在以下两个指令之间共享:

One23SRCApp.directive('directive1',function() {
    return {
        restrict: "A",
        scope:true,
        link: function (scope, element, attrs) {
           scope.tablename = "table";
        }
    };
});


One23SRCApp.directive('directive2',function() {
    return {
        restrict: "A",
           link: function (scope, element, attrs) {
           var tablename = scope.tablename;
        }
    };
})

在HTML中,我有:

<input type="text" directive2 placeholder="Search Models...">

<table directive1>
  <tr>
     <td>column1</td>
     <td>column1</td>
   </tr>
</table>

我创建了具有隔离范围的名为“ directive1”的指令,并将名称“
table”分配给该scope.tablename属性。我无法在其他指令中访问此作用域属性。

那么,如何访问另一个指令的作用域呢?


问题答案:

您可以$rootScope.$broadcast对需要跨指令同步的项目执行操作。

或者,您可以将对象传递给指令1隔离范围,该范围将充当通信机制。在此对象上,如果更改子属性(如tablename),则会影响父范围。

就像是

One23SRCApp.directive('directive1',function() {
    return {
        restrict: "A",
        scope:{tableconfig:'='},
        link: function (scope, element, attrs) {
           scope.tableconfig.tablename= "table";
        }
    };
});


One23SRCApp.directive('directive2',function() {
    return {
        restrict: "A",
           link: function (scope, element, attrs) {
           var tablename = scope.tableconfig.tablename;
        }
    };
})

HTML变成

<table directive1 tableconfig='tableconfig'>
  <tr>
     <td>column1</td>
   <td>column1</td>
   </tr>
</table>

您的控制器应定义此对象

$scope.tableconfig={};



 类似资料:
  • 问题内容: 我正在将AngularJS与c#mvc一起使用。我有一个主页,用户可以在其中输入一些数据,并将其传递给第二个模块,在该模块中,我将使用这些数据进行处理和决策。我必须使用第二个模块中第一个模块中输入或更新的数据。有人可以帮我实现这个目标吗? 问题答案: 希望以下实现可以帮助您有所了解。

  • 问题内容: 我有一些称为的数据,该数据位于三个孩子的父对象的范围内: 在这三个指令之间共享的最佳方法是什么?选项包括: 使用隔离的范围传递三遍,从而跨四个范围复制它 让子指示继承父范围,并找到,或在 把上并注入到这一点的子指示 还是有另一种更好的方法? 问题答案: 您可以创建一个工厂,该工厂可以传递给每个指令或控制器。这样可以确保在任何给定时间只有一个数组实例。编辑:这里唯一的陷阱是确保您在指令作

  • 问题内容: 我创建了一个包装jQuery插件的指令,并将该插件的配置对象从控制器传递到指令。(作品) 在配置对象中是一个我想在事件上调用的回调。(作品) 在回调中,我想修改控制器的$ scope上的属性,该属性 不起作用 。Angular无法识别出该属性由于某种原因而发生了变化,这使我相信回调中的$ scope与控制器的$ scope不同。我的问题是我不明白为什么。 有人能指出我正确的方向吗? 单

  • 问题内容: 我试图做一个简单的指令来显示名称并允许对其进行更改。当我在名称页上放置多个指令时,它们似乎都共享name属性。我究竟做错了什么? 问题答案: 如前面的答案中所述,AngularJS指令的默认行为是共享它们所包含的范围。此行为通过指令定义对象中的参数进行更改。 您可以在AngularJS文档的此部分中查看scope参数的文档:http : //docs.angularjs.org/api

  • 问题内容: 我在同一页面上有两个不同的应用程序。 我可以通过服务(或其他方式)在这两个应用之间共享数据吗? 还是不可能? (我怀疑这是不可能通过常规的角度机构实现的)-但我认为仍然值得提出… 可以使用window变量完成此操作-但我要避免这样做。 谢谢! 问题答案: 我最终以以下方式解决了该问题: 我必须承认这一解决方案并不理想,但这是我找到的最干净的解决方案。