1

「chiliClick」という同じ名前の関数が 2 つあります。コメントされていない関数は、ボタンのチリを押した後でも呼び出されず、コンソールでエラーをスローすることもありません。ただし、同じ関数 (コメント付き) は同じコードで正常に動作します。違いはありますか?助けてください

(function(){

  var app = angular.module("myApp", []);

  var clickController = function($scope){

    $scope.spicy = 'very';

    function chiliClick(){
      $scope.spicy = 'chili';  
    }

    // $scope.chiliClick = function(){
    //   $scope.spicy = 'chili'; 
    // }

  };

  app.controller("clickController", clickController);

}());// Code goes here

    <!DOCTYPE html>
<html lang="en" ng-app="myApp">

  <head>
    <meta charset="UTF-8">
    <title>Hello Controller </title>

  </head>

  <body>

    <div ng-controller="clickController">
       <button ng-click="chiliClick()">Chili</button>
       <button>jalapeño</button>
       <p> this is {{spicy}} hot <p>
    </div>


     <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.1/angular.min.js"></script>
     <script src="myApp.js"></script>
  </body>

</html>

関数「chiliClick」の宣言の違いは何ですか?

4

2 に答える 2

0

最初のものはローカル関数を作成します。

function chiliClick(){
    $scope.spicy = 'chili';  
}

つまり、基本的にはコントローラーのスコープ内のローカル オブジェクトです。そのスコープで呼び出すことはできますが、決してできません。privateこれは、他の言語の関数と概念的に似ていると考えることができます。

2 つ目は、オブジェクトのプロパティとして関数を作成し$scopeます。

$scope.chiliClick = function(){
   $scope.spicy = 'chili'; 
}

今回$scopeは、Angular で呼び出せるもの (オブジェクト)に関数をアタッチしました。これは関数に似ていると考えることができますpublic

于 2015-07-05T22:40:14.117 に答える
0

はい!大きな違いがあります。

コメントされた関数で次のように記述したためです。

$scope.chiliClick = ...

これを行うときは、関数をスコープに提供して、HTML がchiliClick関数を認識できるようにします。

ただし、コメントを外したものと同じように実行すると、HTML は関数について何も認識しません (コントローラー関数内で宣言されたローカル変数であるため)。

于 2015-07-05T22:39:38.820 に答える