当一个控制器在另一个控制器内时如何访问变量?

时间:2015-01-12 03:51:13

标签: javascript jquery angularjs angularjs-directive angularjs-scope

你能不能告诉我当一个控制器在另一个控制器内时如何访问变量..实际上你可以告诉我可以在超级控制器的变量之上进行子控制器访问。

举例:

http://plnkr.co/edit/sKG9nN67P9McXYGXXIzZ?p=preview

<div ng-app="app">
    <div ng-controller="firstCont">
        <div ng-controller="secondCont">
            <input type="text" ng-model="message">
            <h1>{{message}}</h1
        </div>
        <input type="text" ng-model="data">
        <h1>{{data}}</h1> 
    </div>
</div>

第二个控制器位于第一个控制器内。当我更改输入字段时,它会反映在标题上。

但是如果我在代码中做了一些更改。尝试在子控制器中访问上面的控制器变量我们可以这样做吗?但是不能这样做?如何实现

<div ng-app="app">
    <div ng-controller="firstCont">
    <input type="text" ng-model="data">
    <h1>{{data}}</h1>
    <div ng-controller="secondCont">
        <input type="text" ng-model="message">
        <h1>{{data}}</h1
    </div>
</div>

您能告诉访问修饰符规则吗?

修改

<div ng-app="app">
   <div ng-controller="firstCont">
   <input type="text" ng-model="data.data">
   <h1>{{data.message}}</h1>

   <div ng-controller="secondCont">
    <input type="text" ng-model="data.message">
   <h1>{{data.data}}</h1
     </div>

   </div>


   </div>

1 个答案:

答案 0 :(得分:0)

如果您的变量是字符串,则子控制器将创建变量的新实例,而不是查找父作用域。如果将变量设为对象,则子控制器将向父控制器查找该值。因此,在父控制器中创建一个data变量并为其赋予data.message属性。然后在子控制器中,您可以使用ng-scope="data.message访问它。

点击此链接了解详情:https://github.com/angular/angular.js/wiki/Understanding-Scopes#ngRepeat

以下是您的代码编辑:

<div ng-app="app">
    <div ng-controller="firstCont">
        <input type="text" ng-model="data.data">
        <h1>{{data.data}}</h1>
        <div ng-controller="secondCont">
            <input type="text" ng-model="data.message">
            <h1>{{data.data}}</h1>
        </div>
    </div>
</div>