$ scope变量莫名其妙地没有被设置

时间:2013-11-04 23:08:02

标签: angularjs

我有一个angularjs'child'指令,因此:

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>

如第一个清单所述,我有两个案例:

  • 在服务回调中将$scope.showAlert变量硬编码为true具有完全所需的效果:更新范围并相应地更改DOM以显示范围
  • 将$ scope变量设置为从服务返回的值(我知道为true,通过日志记录和调试)不执行任何操作。在这种情况下,如果我将$scope.showAlert值写入屏幕,它将保持为假。

我尝试将服务的返回值硬编码到true,而不进行http调用,这也会产生预期的效果

所以,我很难过,我该怎么办?让我知道还需要什么信息。

感谢。

0 个答案:

没有答案