AngularJs:为什么异步数据到达时我指令内的作用域不更新?

史蒂夫·洛里默

我有一个带有隔离范围的指令,该指令通过引用获取范围变量

angular.module('myApp')
    .directive('myDirective', function() {
        return {
            scope: {
                items: '='
            },
            templateUrl: 'template.html',
            replace: true,
            controller: 'myDirectiveCtrl',
            controllerAs: 'ctrl'
        };
    })
    .controller('myDirectiveCtrl', function($scope) {
        this.items = $scope.items;
    });

这是这样传递的:

    <div my-directive items='items'></div>

在外部控制器中,数据被异步加载,并且传递给指令的合并范围项已更新:

angular.module('myApp', [])
  .controller('myCtrl', function($scope) {

    $scope.setItems = function() {
      $scope.items = [
        'Here',
        'There',
        'Everywhere'
      ];
    };
  });

加载数据时,指令外的作用域会更新,但指令内的作用域不会更新

我的html:

      <div my-directive items='items'></div> <!-- this doesn't update --> 

      Outside directive
      <ul ng-repeat='i in items'>            <!-- this does update -->
        <li>{{i}}</lu>
      </ul>

      <button ng-click="setItems()">Set items</button>

如何在我的指令中获取我的范围以进行更新?我会吗

在这里暴跌

新开发者

当Angular第一次运行指令的控制器函数(即your $scope.items === undefined)时this.items = $scope.itemsthis.items === undefined也是如此。

而已。之后,没有任何变化this.items

这不一样$scope.items$scope.items是双向绑定到外部范围的,因此,每当Angular在外部检测到更改时,它将设置隔离的范围变量。

最简单的方法(我认为最合适的方法)是$scope直接在指令中使用属性:

<div>
    Inside directive
    <ul ng-repeat="i in items">
      <li>{{ i }}</li>
    </ul>
</div>

如果要将控制器用作ViewModel而不是范围(我不知道为什么),可以执行以下操作:

$scope.$watchCollection("items", function(newVal, oldVal) {
   ctrl.items = newVal;
});

编辑:

在Angular 1.3中,您也可以bindToController: true在指令的定义中进行操作,以便控制器属性“ items”将获得所获得的双向绑定$scope.items然后,您甚至不需要执行以下操作this.items = $scope.items;

您的叉形拨叉器进行说明。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我从有界数据派生输出时,为什么我的自定义指令不更新?

AngularJS指令操作需要作用域摘要,为什么?

当我“制作” Python时,为什么不获得“ bin”目录(或“为什么这些指令不再起作用”?)

AngularJS服务为什么不绑定到作用域?

当我使用与父名称相同的作用域变量时,为什么父值会更新?

jQuery作用域-为什么不填充我的数组?

为什么指令具有作用域?

为什么在我们尝试获取数据而不更新/提交新数据时,GraphQL为什么仍查询POST请求?

AngularJS:指令为什么看不到作用域上的对象

为什么我的 JS 不更新我的数据主题?

为什么使用controllerAs嵌套指令时父作用域会中断

AngularJS:嵌套的隐含伪指令之间不共享作用域

angularjs作用域变量未在外部指令中更新

为什么我的数据库不更新?(LARAVEL)

为什么 isset 函数不更新我的数据库?

为什么 js 不更新我在 HTML 页面中的数据?

角度指令-为什么不更新指令中的变量?

我的AngularJS指令中没有共享作用域吗?

链接器函数的作用域在angularjs指令中表示什么

AngularJS:动态编译指令模板时正确的作用域绑定

AngularJS 将作用域数据从 App Controller 传递到指令

为什么ng-repeat指令创建子作用域?

传递给指令时如何更新Angular作用域属性?

在AngularJS中,为什么将指令属性的作用域变量驼峰化时需要用连字符分隔?

为什么我在 Jasmine 1.3.x 中的 AngularJS 异步测试不起作用?

为什么在使用异步调用的 react js 中刷新时不呈现数据?

当数据从 fetch 到达时,我的组件没有更新

AngularJS-为什么DOM不更新

AngularJS指令:为什么不触发监视程序?