我如何使用$ scope来访问诸如$ watch,$ emit,$ digest等函数?
当我尝试这样做时:
class HomeController {
// @ngInject
constructor($scope) {
$scope.country = {};
$scope.countries = [
{name: 'Afghanistan', code: 'AF'},
{name: 'Åland Islands', code: 'AX'},
{name: 'Albania', code: 'AL'},
{name: 'Algeria', code: 'DZ'},
{name: 'American Samoa', code: 'AS'},
{name: 'Andorra', code: 'AD'},
{name: 'Angola', code: 'AO'},
{name: 'Anguilla', code: 'AI'}
];
}
}
export default HomeController;
我收到错误: 无法实例化控制器HomeController
答案 0 :(得分:1)
尝试使用$ watch进行数据绑定时遇到同样的问题。
在撰写本文时,当前版本的Angular New Router(v0.5.3)无法在注入$ scope的情况下实例化控制器。 issue已登录github。
根据一个单独的帖子,npm上有一个临时包,修复了这个问题。请查看zVictor's post以获取相关说明。
答案 1 :(得分:0)
NEWER ANSWER
使用新路由器,控制器在创建子范围之前 >>启动
子视图(控制器的范围)是在调用activate
方法时创建的 - 也就是说 - 在视图的实际编译完成之后。因此,注入$ scope是不可能的 - 它很容易在以后创建
长篇故事简短......
有一个更好,内置解决方案。
不要将属性分配给不存在的$scope
,而只需在"this"
变量上分配它们 - 控制器实例变量。然后在视图上,您可以通过参考控制器名称来使用它们:
angular.module('app.home').controller('HomeController', HomeController);
function HomeController() {
this.name = "tomer";
}
现在在模板html上:
<div>
<h1>{{home.name}}
</div>
有道理吗?