0

angularjs の「子」ディレクティブがあるため、次のようになります。

someAlertMessage: function(){
    return {
        restrict: 'E',
        template: '<span ng-show="showAlert">whatever</span>',
        require: '^someInput',
        controller: function($scope, AcmeService){
            $scope.setShowAlert = function(aValue){

                AcmeService.getThings(aValue, function(data){ // bog standard http get with callback
                    console.log(data) // THIS LOGS true
                    $scope.showAlert = true; // THIS WORKS
                    $scope.showAlert = data; // THIS DOESNT WORK
                }

            }
        }
        link: function(scope, e, a, c){
            scope.$watch('someinputvalue', function(nv, ov){
                scope.setShowAlert(nv)
            }
        }
    }
}

そして、これらのディレクティブが使用されているページのマークアップ:

<someInput>
    <someAlertMessage></someAlertMessage>
</someInput>

「someInput」親ディレクティブについては、あまり関心がありません。注意すべき唯一のことtransclude:trueは、ディレクティブとマークアップで次のことです。

<div>
    <!-- things -->
    <div ng-transclude></div>
</div>

最初のリストで述べたように、2 つのケースがあります。

  • サービス コールバック内で変数を true にハードコーディングすると、$scope.showAlertまさに目的の効果が得られます。スコープが更新され、それに応じて DOM が変更され、スパンが表示されます。
  • $scope 変数をサービスから返された値 (trueログとデバッグによってわかっている) に設定しても何も起こりません。この場合、$scope.showAlert値を画面に書き出すと、false のままになります。

truehttp呼び出しを行わずに、サービスからの戻り値をハードコーディングしようとしましたが、これも望ましい効果をもたらします

それで、私は困惑しています、私は何ができますか?さらに必要な情報を教えてください。

ありがとう。

4

0 に答える 0