1

ここにこれの最小限のプランクがあります。

何が起こっているかは次のとおりです。

  1. 最初の$httpリクエストが正常に行われました
  2. クリック イベントがディレクティブのボタンにバインドされている
  3. ボタンをクリックすると、目的の機能が起動します
  4. その関数の$httpリクエスト (ステップ 1 のリクエストと同じ) が起動しない

コードが短いのでこちらにも載せておきます。

テンプレート

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <title>AngularJS Plunker</title>
    <!-- angular source -->
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <p>Click this button and an http request should log to the console</p>
    <button make-request act='flip()'>Get Gaius</button>
  </body>

</html>

コントローラ

app = angular.module('plunker', [])

app.controller 'MainCtrl', ($scope, $http) ->
  # this function is just here to show that no errors are thrown
  err = (err) -> console.log 'err', err

  # this successfully gets
  $http.get('gaius.json')
    .then ((res) -> console.log 'init data', res.data), err


  $scope.flip = ->
    # although this function is called,
    console.log 'called to act'
    # http does not get. No request is made.
    $http.get('gaius.json')
      .then ((res) -> console.log 'flip data', res.data), err

app.directive 'makeRequest', ($compile) ->
  scope:
    act: '&'

  link: (scope, element, attrs) ->
    element.bind 'click', (e) -> scope.act()

データ

{
  "name": "gaius baltar"
}

そのリクエストが実行されない理由は何ですか?

4

1 に答える 1

3

スコープで $apply() を呼び出して、プロミス解決を伝播する必要があります。

app.directive 'makeRequest', ($compile) ->
  scope:
    act: '&'

  link: (scope, element, attrs) ->
    element.bind 'click', (e) -> scope.act(); scope.$apply();
于 2013-07-10T12:52:07.760 に答える