将Angular Service对象绑定到控制器作用域并更新
Binding Angular Service object to Controller Scope and updating
我有一个EmployeeService
,我将它注入到EmployeeController
中。EmployeeService
包含一个对象。
我将服务对象绑定到控制器范围:
app.controller('EmployeeController', function($scope, EmployeeService) {
$scope.employee = EmployeeService.getEmployee();
}
HTML模板显示员工的姓名:
{{employee.name}}
如果我在EmployeeService
中操作employee对象。。。即EmployeeService.getEmployee().name = 'new name'
,模板显示新名称。
但是,如果我替换EmployeeService
中的employee对象。。。即CCD_ 7,模板不显示新名称。
为什么替换Service对象没有反映在模板中?
我有以下Plunk来证明这一点:http://plnkr.co/edit/k7oKd1VgsBvMGvVdP5kM?p=preview
在我的Plunk中,员工控制员/服务工作,经理控制员/服务不工作。
如果有人能帮我了解发生了什么,我将非常感谢。
您需要控制器来监视管理器的更改。
$scope.$watch(function() {
return ManagerService.getManager();//<--when this changes
}, function(newManager) { //<-- run this function
$scope.manager = ManagerService.getManager();
});
下面是一个更新的Plunkr,它有一种方法:http://plnkr.co/edit/YE72JcxDSFqfZLH32ERy?p=preview
这是因为angular观察原始对象的方式。如果声明{{employee.name}}
angular,则开始观察对象参照是否发生更改。正如您所说:对EmployeeService.getEmployee().name
的更改在视图中得到了正确的注意和反映。
但是EmployeeService.setEmployee({name: 'new name'})
用新的对象替换被观察的对象,而angular仍然观察原始对象。因此,角度无法识别您的更改,视图也不会更新。
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 从指令链接函数监视控制器作用域
- 控制器作用域变量在刷新之前未加载
- AngularJS:如何在指令范围的对象发生变化时更新与控制器作用域相关联的控制器作用域
- ng-click 指令不调用控制器作用域中定义的函数
- 如何从2级指令访问控制器作用域
- 角度指令控制器作用域继承
- 触发指令AngularJs的控制器作用域
- Angularjs-在路由更改时刷新控制器作用域
- 访问父指令's子指令中的控制器作用域变量
- 将Angular Service对象绑定到控制器作用域并更新
- UI引导日期选择器不调用内联控制器作用域上的函数
- 将变量从控制器作用域传递到指令
- 工厂中与控制器作用域绑定的已修改数据不会更新
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 如何在angular 1.4.5+中操纵指令中的控制器作用域
- AngularJS:在两个具有隔离作用域的指令之间共享一个控制器作用域
- 如何将控制器作用域变量传递给angular.元素在头部元素中追加子元素时
- AngularJS+Jasmine -在指令中写入一个控制器作用域
- 如何从嵌入式D3脚本中访问Angular控制器作用域