2016-03-02 28 views
4

的index.html,我做这样的事情:如何将范围内的变量注入到角控制器中?

<div ng-controller="MyController"> 
    <div ng-model="pk" ng-init="pk='2'"></div> 
</div> 

不管怎样,在我的文件,我做这样的事情:

.controller('MyController', [ 
    '$scope', function($scope) { 
    alert('Sup ' + $scope.pk); 
    } 
]) 

因此,可以说的pk的URL是2,我期望看到类似这样的内容:

Sup 2

然而,我的输出是这样的:

燮不确定

我在做什么错?谢谢!

+0

如果你手工编写'ng-init =“pk ='2'”',它会起作用吗? – Selcuk

+0

没有。这也行不通:/ –

+1

所以你的问题与Django无关。 – Selcuk

回答

1

延迟警报与$timeout

.controller('myCtrl', [ 
    '$scope', '$timeout', function($scope, $timeout) { 
    $timeout(function() 
     alert('Sup ' + $scope.pk); 
    }); 
    } 
]); 
1

使用$scope.$watch

.controller('MyController', ['$scope', function($scope) { 
    $scope.$watch('pk', function(newValue, oldValue) { 
     alert('Sup ' + newValue); 
    }); 
}]); 

你之前的观点已经被初始化的,因此之前ng-init被称为alert('Sup ' + $scope.pk);被调用。

2

出现这种情况,是因为从控制器代码视图代码之前执行,所以运行

alert('Sup ' + $scope.pk); 

ng-init时 - 不会执行。

因此,对于解决方案,你可以在里面控制器,或从其他答案喜欢watch使用的解决方案,或timeout

1

角度简单的分配值,有应始终遵循一招:“在模型中始终使用点” 。 例如:

ng-model="models.pk"

其他位于this answer

您还应该考虑以下一些guidelines from John Papa可以防止这种问题,请参阅here一个示例。 试试吧,告诉我它是怎么回事。

相关问题