首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅从一个控制器接收更新的范围值。

仅从一个控制器接收更新的范围值。
EN

Stack Overflow用户
提问于 2016-07-11 14:38:42
回答 2查看 69关注 0票数 0

我有个按钮,box.component.js:

代码语言:javascript
运行
复制
angular.module('box').component('box', {
    templateUrl: 'box.template.html',
    controller: function boxController(mainService, UiService){
        this.addBox = function () {

            //Set box as selected
            var box = mainService.selected;
            var nodesHolder = UiService.getNodesHolder().children;

            //Set custom properties
            box.name = "Box";
            box.id = nodesHolder.length;
            box.parameters = {
              parm1:  Math.floor((Math.random() * 10) + 1), 
              parm2:  Math.floor((Math.random() * 10) + 1), 
              parm3:  Math.floor((Math.random() * 10) + 1)

            };
            //Push box into nodes holder array
            nodesHolder.push(box);
        }
    }
});

单击时,它会创建一个填充数组的对象,Mylist.component.js:(在视图中显示为圆圈):

代码语言:javascript
运行
复制
angular.module('list').component('list', {

    templateUrl: 'list.template.html',

    controller: function nodesController(UiService) {

        this.nodes = UiService.getNodesHolder().children;

        this.selected = function (value) {

            var nodes = UiService.getNodesHolder();

            UiService.selected = nodes.children[value];

        }


    }

});

并通过parms-bar.Component显示其名称和参数:

代码语言:javascript
运行
复制
angular.module('parms-bar').component('parmsbar', {
    templateUrl: 'parms-bar.template.html',
    controller: function parmsController(mainService){
        this.selected = mainService.selected;
    }
});

这些组件之间的通信由两个服务管理。一个检测所选对象的main.service.js:

代码语言:javascript
运行
复制
angular.module('app').service('mainService', function(){
    var selected = {};

    var service = {
        get selected(){
            return selected;
        },
        set selected(value){
            selected = value;
        }
    }
    return service;
});

并且返回列表(圆圈)中的项,ui.service.js:

代码语言:javascript
运行
复制
angular.module('app').service('UiService', function(){

    //Nodes-holder
    var nodesHolder = { children: []};

    return {

        getNodesHolder: function () {
            return nodesHolder;
        }
    };
});

当我点击一个圆圈,我想切换到相应的对象,所以显示它的参数,但这不是working.It似乎参数视图只得到更新的盒子控制器。也许在我的list.component.js中有什么问题,我试图将圆圈设置为所选的?

代码语言:javascript
运行
复制
 this.selected = function (value) {

            var nodes = UiService.getNodesHolder();

            UiService.selected = nodes.children[value];

        }

活生生的例子

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-11 19:16:06

重点是保持物体不变,我在这里发现了两件事,

首先,由于保持对象不变,那么,当add box函数运行时,相同的对象将被操作,也就是说数组中的所有值都接受最新修改的值。因此,为了对抗它,我创建了一个box对象的新副本,同时将它推送到数组中。

代码语言:javascript
运行
复制
nodesHolder.push(angular.copy(box));

第二,在list component.js中,您没有更新mainService.selected,所以我更改了

代码语言:javascript
运行
复制
UiService.selected = nodes.children[value];
              to
mainService.selected = nodes.children[value];

现在,另一个问题出现了,因为第一个解决方案。由于我正在复制对象,所以在mainService.selected中设置的值与它中的上一个值不同。因此,为了保持对象不变,我创建了两个函数

代码语言:javascript
运行
复制
1. function clearObject(obj){
         // Function that cleans up the keys of the given object 
         // without creating a new object.
   }

2. function copyData(obj) {
       // Function that copies the new object data to selected.
   }

最后,这里是工作的按钮,https://plnkr.co/edit/Tk8YstW83NKwnYtbQZnM?p=preview

票数 3
EN

Stack Overflow用户

发布于 2016-07-11 16:24:03

实际上,当您将其转换为box.component.js文件中的objet模型时。

代码语言:javascript
运行
复制
box = {
  "name": "Box",
  "id": nodesHolder.length,
  "parameters": {
    "parm1":  Math.floor((Math.random() * 10) + 1), 
    "parm2":  Math.floor((Math.random() * 10) + 1), 
    "parm3":  Math.floor((Math.random() * 10) + 1)
  }
}

然后选择的圆圈显示正确的值。请在list.component.js文件中检查使用console.log(UiService.selected);

list.template.html文件中的一些小错误变成了<div id="list" class="list"> .Actually,在plnkr <div id="list"class"list">中是这样的。对不起,我可以继续这么做,只是我需要一些时间才能让它运转起来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38309732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档