在 index.html 中,我正在执行以下操作:
<div ng-controller="MyController">
<div ng-model="pk" ng-init="pk='2'"></div>
</div>
无论如何,在我的 angular 文件中,我正在做这样的事情:
.controller('MyController', [
'$scope', function($scope) {
alert('Sup ' + $scope.pk);
}
])
因此,假设URL的pk为2,我希望看到类似的内容:
Sup 2
但是,我的输出是:
Sup undefined
我做错了什么?谢谢!
答案 0 :(得分:2)
这种情况发生了,因为来自控制器的代码在来自视图的代码之前执行,因此在运行时
alert('Sup ' + $scope.pk);
ng-init
- 不执行。
因此,对于解决方案,您可以在控制器内部简单地分配值,或者使用其他答案中的解决方案,例如watch
或timeout
答案 1 :(得分:1)
使用$timeout延迟提醒:
.controller('myCtrl', [
'$scope', '$timeout', function($scope, $timeout) {
$timeout(function()
alert('Sup ' + $scope.pk);
});
}
]);
答案 2 :(得分:1)
.controller('MyController', ['$scope', function($scope) {
$scope.$watch('pk', function(newValue, oldValue) {
alert('Sup ' + newValue);
});
}]);
在视图初始化之前调用alert('Sup ' + $scope.pk);
,因此在调用ng-init
之前调用。{/ p>
答案 3 :(得分:1)
Angular有一个应该始终遵循的技巧:“始终在模型中使用点”。 例如:
<?php
while($row=mysql_fetch_array($query))
{
$id=$row['poster_id'];
$id2=$row['commenter_id'];
echo '<div style="float:left"><a href="user.php?id='.$id.'"><img src="'.htmlentities($row["poster_photo"], ENT_QUOTES, 'UTF-8').'"></a>';
if ($comment !== 'NULL')
{
echo '<div style="float:left"><a href="user.php?id='.$id2.'"><img src="'.htmlentities($row["commenter_photo"], ENT_QUOTES, 'UTF-8').'"></a>';
}
else
{
echo 'Nothing to show';
}
echo '</div>';
echo '</div>' ;
echo '</br>' ;
}
?>
在this answer中查看更多内容。
您还应该考虑使用一些可以防止出现此类问题的guidelines from John Papa,请参阅here一个示例。 试一试,告诉我它是怎么回事。