Angular new router向控制器注入$ scope

时间:2015-05-20 08:33:42

标签: javascript angularjs

我如何使用$ 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

2 个答案:

答案 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>

有道理吗?