我有一个带有服务myApp
的有角度的应用myService
,其中包含两个控制器使用的对象data
,parentCtrl
和childCtrl
后者继承自前者:https://jsfiddle.net/OleWahn/7ehLva10/2/
我在data
parentCtrl
之内引用$scope.data = myService.getData()
,childCtrl
也可以data
访问{。}}。
我在myService
的结尾处定义了$scope.data
,因此data
只是对data
的引用。
因此,我可以在子控制器中更改myService
的属性,每个人parentCrl
,childCtrl
和data
都会知道这些更改。到目前为止,非常好。
我的问题如下:如果我要覆盖整个myService
对象,我会在setData
中调用childCtrl
方法data
。
同样,我希望每个人都收到$scope.data
已更改的通知。
myService
但仍然指向最初定义的对象,data
#include "prussdrv.h"
#include <pruss_intc_mapping.h>
prussdrv_exec_program (PRU_NUM, "./PRU_example.bin");
sleep(1);
prussdrv_pru_send_event(ARM_PRU0_INTERRUPT);
//wait till it will be completed
prussdrv_pru_wait_event (PRU_EVTOUT_0);
prussdrv_pru_clear_event (PRU_EVTOUT_0, PRU0_ARM_INTERRUPT );
/* Disable PRU and close memory mapping*/
prussdrv_pru_disable(PRU_NUM);
prussdrv_exit ();
已更改通知,这将成为我的最后一个问题:
有没有办法自动将范围引用更新为服务中定义的对象?
答案 0 :(得分:2)
使用目标参数angular.copy
angular.copy 1
用法
angular.copy(source, [destination]);
- 如果提供了目标,则会删除其所有元素(对于数组)或属性(对象),然后将源中的所有元素/属性复制到该目标。
因此,不是替换范围引用,而是保留引用,清空它,并用新内容填充它。
function setData(newData) {
//DO this
angular.copy(newData, data);
//Instead of this
//data = newData;
}
答案 1 :(得分:1)
解决问题的两种不同方法:
此解决方案可归功于@ doctor_Nick42:
我在$broadcast
的{{1}}方法中添加了setData
,并相应地在myService
更新parentCtrl
中将其捕获。
查看更新的小提琴https://jsfiddle.net/7ehLva10/7/了解详情。
找到一个可能的解决方案 - 我可以将$scope.data
定义为一个函数
返回$scope.data
,即
myService.getData()
此解决方案的缺点是在视图中我需要将$scope.data = function() {
return myService.getData();
};
称为函数,即$scope.data
。