簡體   English   中英

AngularJS:ng-init 的范圍

[英]AngularJS: scope of ng-init

Angular 中 ng-init 的范圍是什么? 這是一個演示我的問題的簡單示例:

<div ng-init="model = { year: '2013'}">
    <a href="" ng-click="model.year = '2012'">2012</a> |
    <a href="" ng-click="model.year = '2013'">2013</a>
    <div>Showing {{ model.year }}</div>
    <hr />
</div>
<div ng-init="model = { year: '2013'}">
    <a href="" ng-click="model.year = '2012'">2012</a> |
    <a href="" ng-click="model.year = '2013'">2013</a>
    <div>Showing {{ model.year }}</div>
</div>

此處提供現場示例: http : //plnkr.co/edit/HkioewOzzglvFMKDPdIf?p=preview

似乎 ng-init 范圍在 2 個div[ng-init]之間共享。 例如,如果您單擊任一部分中的年份“2012”,它會更改兩個部分中的year屬性。

有沒有辦法告訴 angular 為每個 ng-init 創建一個新的范圍,從而單擊“2012”年只會影響它所屬的部分?

ng-init不會創建新的作用域,它會評估當前作用域中的表達式。 在您的示例中,您的ng-init都在同一范圍內,更改相同的模型屬性會影響另一個。 如果您需要單獨的范圍,您可以嘗試ng-controller

<div ng-controller="MainCtrl" ng-init="model = { year: '2013'}">
      <a href="" ng-click="model.year = '2012'">2012</a> |  <a href="" ng-click="model.year = '2013'">2013</a>
      <div>Showing {{ model.year }}</div>
      <hr />
    </div>
<div ng-controller="MainCtrl" ng-init="model = { year: '2013'}">
      <a href="" ng-click="model.year = '2012'">2012</a> |  <a href="" ng-click="model.year = '2013'">2013</a>
      <div>Showing {{ model.year }}</div>
 </div>

演示

旁注:在這種情況下,您不需要 ngInit,只需直接在您的控制器中初始化該值。

ngInit 唯一合適的用途是為 ngRepeat 的特殊屬性設置別名。 除了這種情況,您應該使用控制器而不是 ngInit 來初始化范圍上的值。

https://docs.angularjs.org/api/ng/directive/ngInit

由於ng-if創建了一個新的作用域,您可以通過以下方式完成它:

<div ng-if="true" ng-init="model = { year: '2013'}">

您好澄清並找到解決方案,請您嘗試下面給出的解決方案

 <script> var app = angular.module('myAngularApp', []); app.controller('myCtrl1', function ($scope) { }); app.controller('myCtrl2', function ($scope) { }); </script> <body ng-app="myAngularApp"> <div ng-controller="myCtrl1" ng-init="model = { year: '2012'}"> <a href="" ng-click="model.year = '2012'">2012</a> | <a href="" ng-click="model.year = '2013'">2013</a> <div>Showing {{ model.year }}</div> </div> <hr /> <div ng-controller="myCtrl2" ng-init="model = { year: '2013'}"> <a href="" ng-click="model.year = '2012'">2012</a> | <a href="" ng-click="model.year = '2013'">2013</a> <div>Showing {{ model.year }}</div> </div> </body>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM