更改控制器初始化中的作用域不适用于指令

轰炸机

我有这个指令:

angular.module("app", [])
  .directive("myDirective", myDirective);

function myDirective() {
  return {
    template: '{{vm.numbers}}',
    scope: {
      numbers: '='
    },
    controller: MyController,
    controllerAs: 'vm',
    bindToController: true,
  };
}

function MyController($timeout) {
  var vm = this;
  vm.numbers.push(3);
  $timeout(function() {
     vm.numbers.push(4);
  });
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>

<div ng-app="app">
  <my-directive numbers="[1,2]"></my-directive>
</div>

为什么不将3推入数组?

那将是烧瓶

=之间有明显的语法差异@双向=绑定的功能之一是,当属性值不是作用域属性名称时,您应格外小心,因为它不是用于此目的的。

在您的示例中发生的是'[1,2]'字符串已解析为数组,并且vm.number在运行控制器功能时可用作范围属性。所做的更改vm.numbers.push(3)已应用于匿名数组的副本,并且在任何地方都未观察到。控制器功能完成后,第一个摘要循环启动,并再次vm.number[1, 2]数组覆盖之后,该$timeout函数启动并使用进行另一个更改vm.numbers.push(4)vm.number此刻才观察到其中的变化

这就是将匿名数组或对象馈送到双向指令绑定时发生的情况。您还会在分配vm.number其他内容时遇到问题

由于@绑定仅适用于文本,因此也不是一种选择。您可以改为这样做

function myDirective() {
  return {
    template: '{{vm.numbers}}',
    scope: {},
    controller: MyController,
    controllerAs: 'vm',
    bindToController: true,
  };
}

function MyController($timeout, $parse, $attrs) {
  var vm = this;
  vm.numbers = $parse($attrs.numbers)() || [];
  vm.numbers.push(3);
  $timeout(function() {
     vm.numbers.push(4);
  });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在控制器和postLink初始化之后,在指令中重置作用域变量;

来自分类Dev

控制器中的索引方法不适用于活动模型序列化器

来自分类Dev

AngularJS:在控制器中初始化嵌套作用域变量

来自分类Dev

Angular $ watch不适用于通过指令更新的控制器变量

来自分类Dev

Angular $ watch不适用于通过指令更新的控制器变量

来自分类Dev

PUMA初始化器不适用于Rails 4.2

来自分类Dev

Ajax请求不适用于Spring控制器

来自分类Dev

推送不适用于模态显示的控制器

来自分类Dev

uinavigation控制器委托不适用于MFSideMenu

来自分类Dev

推送不适用于模态显示的控制器

来自分类Dev

控制器不适用于弹簧

来自分类Dev

AngularJS初始化指令/控制器的$ scope

来自分类Dev

双向绑定不适用于使用angularjs的模态(子控制器)中的变量

来自分类Dev

app.js中的控制器不适用于离子项目

来自分类Dev

Web模拟不适用于Rails控制器中的redirect_to

来自分类Dev

控制器中包含的CSS不适用于此页面

来自分类Dev

angular js模块中的控制器功能不适用于删除操作

来自分类Dev

在 Ember 中 $.ajax 成功后,控制器值不适用于模板

来自分类Dev

Ajax 请求不适用于 rails 中的控制器操作

来自分类Dev

从指令AngularJS更改控制器作用域值

来自分类Dev

在指令中更改控制器作用域变量不会反映在控制器功能中

来自分类Dev

在指令中更改控制器作用域变量不会反映在控制器功能中

来自分类Dev

角单元测试在指令中初始化“无名”控制器

来自分类Dev

在通过指令加载的模板中初始化控制器?

来自分类Dev

播放框架Javascript路由器不适用于其他目录中的控制器

来自分类Dev

简单的数组初始化填充适用于 Linux (CentOS),但不适用于 Windows

来自分类Dev

更改包含的页面和URL,而无需在AngularJS中重新初始化控制器

来自分类Dev

导航栏在每个视图控制器(如Twitter)中具有不同的颜色(不适用于setbartintcolor)

来自分类Dev

route()辅助函数不适用于laravel中的资源控制器,但url()可以工作。正常吗

Related 相关文章

  1. 1

    在控制器和postLink初始化之后,在指令中重置作用域变量;

  2. 2

    控制器中的索引方法不适用于活动模型序列化器

  3. 3

    AngularJS:在控制器中初始化嵌套作用域变量

  4. 4

    Angular $ watch不适用于通过指令更新的控制器变量

  5. 5

    Angular $ watch不适用于通过指令更新的控制器变量

  6. 6

    PUMA初始化器不适用于Rails 4.2

  7. 7

    Ajax请求不适用于Spring控制器

  8. 8

    推送不适用于模态显示的控制器

  9. 9

    uinavigation控制器委托不适用于MFSideMenu

  10. 10

    推送不适用于模态显示的控制器

  11. 11

    控制器不适用于弹簧

  12. 12

    AngularJS初始化指令/控制器的$ scope

  13. 13

    双向绑定不适用于使用angularjs的模态(子控制器)中的变量

  14. 14

    app.js中的控制器不适用于离子项目

  15. 15

    Web模拟不适用于Rails控制器中的redirect_to

  16. 16

    控制器中包含的CSS不适用于此页面

  17. 17

    angular js模块中的控制器功能不适用于删除操作

  18. 18

    在 Ember 中 $.ajax 成功后,控制器值不适用于模板

  19. 19

    Ajax 请求不适用于 rails 中的控制器操作

  20. 20

    从指令AngularJS更改控制器作用域值

  21. 21

    在指令中更改控制器作用域变量不会反映在控制器功能中

  22. 22

    在指令中更改控制器作用域变量不会反映在控制器功能中

  23. 23

    角单元测试在指令中初始化“无名”控制器

  24. 24

    在通过指令加载的模板中初始化控制器?

  25. 25

    播放框架Javascript路由器不适用于其他目录中的控制器

  26. 26

    简单的数组初始化填充适用于 Linux (CentOS),但不适用于 Windows

  27. 27

    更改包含的页面和URL,而无需在AngularJS中重新初始化控制器

  28. 28

    导航栏在每个视图控制器(如Twitter)中具有不同的颜色(不适用于setbartintcolor)

  29. 29

    route()辅助函数不适用于laravel中的资源控制器,但url()可以工作。正常吗

热门标签

归档