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 のままになります。
true
http呼び出しを行わずに、サービスからの戻り値をハードコーディングしようとしましたが、これも望ましい効果をもたらします
それで、私は困惑しています、私は何ができますか?さらに必要な情報を教えてください。
ありがとう。