如果我在控制器中设置了一些内容,我该如何在视图中访问它?

时间:2014-03-04 17:00:13

标签: javascript angularjs

我是在公司控制器中创建的。

$scope.$watch('companyName', function () {
      console.log($scope.company.name); 
    });

我想获取公司名称,如何在ng-controller与视图中的控制器名称匹配的位置调用它?

这是否与此类似?

<span ng-init="companyName"> {{ companyName() }} </span>

我不确定我是否理解如何从视图中获取该功能的信息。我想自己很困惑。

4 个答案:

答案 0 :(得分:5)

是的,您的示例似乎有点奇怪。

无论如何,要在视图中绑定$scope属性,请使用其名称。

所以在控制器中:

$scope.company = { name: "Acme" };

在视图中:

<span> {{ company.name }} </span>

无需手动创建$watch。 Angular将为视图中使用的任何属性(为您)创建一个监视。

除非您想在视图中初始化某些内容,否则您也不必使用ng-init

要查看观看的实际操作,只需在input旁边添加文字span

<input type="text" ng-model="company.name"/>

如果更改文本框中的值,您会看到span中反映的更改。

Here is a plunker来演示。

答案 1 :(得分:3)

我觉得你很困惑!

在公司控制器中,您只需要:

$scope.companyName = "ACME";

要在视图中访问它:

{{ companyName }}

答案 2 :(得分:2)

绑定到值时,假定它相对于$scope。在这种情况下(假设您想要的值与您在$watch中指定的值相同),您希望init一个项目到一个对象,它应该看起来像这样:

 <span ng-init="company = {name: 'whatever' }">{{company.name}}</span>

出于各种原因,除ng-init之类的内容外,不建议使用ng-repeat。如果它工作,它可以工作,但我建议习惯在控制器中初始化事物(只需在控制器功能结束之前的某处添加语句,例如$scope.company = {name: 'whatever'};)。一个原因是在单元测试中更容易测试控制器,因为让测试依赖于特定视图很烦人。)

答案 3 :(得分:1)

最简单的方法是:

控制器:

$scope.companyName = "My company";

视图:

<span>{{companyName}}</span>

$scope.$watch只是一个监控CompanyName值变化的函​​数,我认为你不需要它。