AngularJS - 接收动态内容的组件

Posted

技术标签:

【中文标题】AngularJS - 接收动态内容的组件【英文标题】:AngularJS - Component receiving dynamic content 【发布时间】:2016-06-29 08:43:30 【问题描述】:

早上,

我编写的一个新组件存在问题,其中一个值没有像我想象的那样传递给控制器​​。

让我们来看看这个组件声明,你可以看到我传入了两个字符串和一个对象,该对象等同于来自父控制器的数字。让我们假设 'url' 和 'pagesize' 已经很好地工作了——他们确实做到了:)

<paging url="/myurl.html" pagesize="10" numberofitems="ctrl.mynumber"></paging>

您可以看到我在这里创建了一个新模块,该模块目前只显示一个段落标签,其中显示了数字“ctrl.numberofitems”变量。重要的是要知道这可以正常工作并且值可以正确显示。

    angular.module('PagingModule', [])
    .component('paging', 
        scope: ,
        controllerAs: 'ctrl',
        bindings: 
            url: '@',
            pagesize: '@',
            numberofitems: '='
        ,
        controller: pagingController,
        template: '<p>ctrl.numberofitems</p>'
    );

    function pagingController() 
        var vm = this;
        $scope.$watch("ctrl.numberofitems", function (val)  //ADDED THE WATCH AND CAN NOW SEE THE VALUE UNDEFINED, THEN POPULATED CORRECTLY
            console.log(val);
        );
    

当我尝试引用“vm.numberofitems”时,我收到未定义的信息吗?此时,“pagesize”和“url”都可以完全访问和填充。

编辑:现在,如果我参考如上所示的 $scope.watch,我可以访问从我的控制器推入的值 - 我现在要注意的是该值是未定义的,那么当服务的承诺已解决,它会更改为实际列表本身。

现在问题变了:) 为什么我必须这样做 $watch?这似乎完全矫枉过正,而且显然很昂贵;我只是错过了一个我可以使用的非常明显的模式吗?

再次感谢

【问题讨论】:

【参考方案1】:

尝试等待$onInit

控制器实例化后,隔离作用域绑定的初始值将绑定到控制器属性。您可以通过提供一个名为 $onInit 的控制器方法在初始化这些绑定后访问它们,该方法在元素上的所有控制器都已构建并初始化其绑定后调用。

-- https://docs.angularjs.org/api/ng/service/$compile#-bindtocontroller-


接下来要做的是在上面加上$watch

$scope.$watch("ctrl.numberofitems", function(newValue) 
    console.log(newValue);
);

如果视图可以看到它,那么手表应该可以看到它。

【讨论】:

仍然没有,调试这个的最好方法是什么?显然,该项目正在传递,因为它出现在视图中,只是没有在控制器中定义.....仅供参考,我已将 $onInit 添加到上面的代码中。

以上是关于AngularJS - 接收动态内容的组件的主要内容,如果未能解决你的问题,请参考以下文章

盘点开发人员的十佳AngularJS框架

组件不会从父angularjs接收更新

模板函数中的 AngularJS 访问绑定

如何在AngularJS中动态添加组件?

AngularJS:从列表中动态添加组件

AngularJS - 如何动态更改组件控制器?