1. ホーム
  2. angularjs

[解決済み] controllerAs "プロパティを使用する理由は何ですか?

2022-02-17 12:47:29

質問

AngularJSのチュートリアルに取り組んでいるのですが、次のようなコードがあります。

.state('index',{
  url:"/",
  templateUrl:"views/index.html",
  controller:"IndexCtrl",
  controllerAs:"index"
})

を使いたくなる理由は何でしょうか? controllerAs プロパティを使用してください。

どのように解決するのですか?

いくつかあります。

1. スコープの使用量を減らす

コントローラのスコープにあるすべてのデータを読み込むのではなく、単純に this を使用して、必要なものすべてを読み込むことができます。

などです。

ルート

state('index',{
    url:"/",
    templateUrl:"views/index.html",
    controller:"ListCtrl",
    controllerAs:"list"
})

コントローラ内

angular.module('feed').controller('ListCtrl', function($scope, reddit){
    var vm   = this;
    vm.names = ["Michael", "Roy"];

});

テンプレートで

<ul>
    <li ng-repeat="name in list.names">
        <div>{{name}}</div>
    </li>
</ul>

2. 正しいスコープの使い方

複数のコントローラが登場すると、スコープが厄介なことになります。使用方法 controllerAs メソッドを使用すると、この問題を解決するのに非常に有効です。以下に例を示します。

間違っています。

<span>Outside Controller: Your name is: {{username}}</span>
<div ng-controller="SignupController">
    <span>Inside Controller: Your name is: {{username}}</span>
    <fieldset legend="User details">
        <input ng-model="username">
    </fieldset>
</div>

正解です。

<span>Outside Controller: Your name is: {{user.name}}</span>
<div ng-controller="SignupController">
    <span>Inside Controller: Your name is: {{user.name}}</span>
    <fieldset legend="User details">
        <input ng-model="user.name">
    </fieldset>
</div>

より分かりやすい画像を見つけました。 :

表敬訪問 : AngularJsのquot;controller as"構文 - 明確化?