0

http://www.youtube.com/watch?v=HCR7i5F5L8c#t=587で説明されている例を試してみたかった

私は1.0.8 angular jsを含めて試してみましたが、次のようにエラーが発生しました

引数 'UserCtrl as uCtrl' は関数ではなく、未定義になりました

エイリアシングが問題だと思ったので、エイリアシングを削除してコードを次のように変更することを考えました

index.html

<html ng-app>
<body ng-controller='UserCtrl'>
  Hi <input ng-model='UserCtrl.user.first'>
  <button ng-click='UserCtrl.bye()'>bye</button>
  <script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js'></script>
  <script src='UserControllers.js'></script>
</body>
</html>

UserControllers.js

function UserCtrl() {
  this.user = {
    first:'Larry', 
    last:'Page'
  };
  this.bye = function() { 
    alert('bye:' + this.user.first); 
  };
}

その後、上記のエラーが発生しました。しかし、それでもそのビデオで言及されていることは起こりません。コンソールでチェックしてもエラーは見つかりませんでした。さようならボタンをクリックしてもアラートが来ません。

angular js 1.0.7および1.0.8で試しました

問題を見つけるのを手伝ってください。

4

1 に答える 1

2

コントローラーの "as" 実験的機能は 1.1.5 で追加されたので、問題を引き起こしていたのはあなたの言うとおりです。

「as」がないと、コントローラーは暗黙的であるため、変数名にプレフィックスを付ける必要はありません。

したがって、1.1.5 以降に更新して「as」の使用に固執するか、以前のバージョンの Angular で動作するコードのバージョンを次に示します (フィドラーはこちら: http://jsfiddle.net/PDqbb/ )。

<body ng-app ng-controller='UserCtrl'>
  Hi <input ng-model='user.first'>
  <button ng-click='bye()'>bye</button>
</body>


function UserCtrl($scope) {
  $scope.user = {
    first:'Larry', 
    last:'Page'
  };
  $scope.bye = function() { 
    alert('bye:' + this.user.first); 
  };
}

また、ここに適用される「this」の使用について少し含む「as」の概要を次に示します

于 2013-11-04T18:44:21.723 に答える