Angularjs 如何在我的控制器中使用ng click变量?
我有一个指令,看起来像这样Angularjs 如何在我的控制器中使用ng click变量?,angularjs,Angularjs,我有一个指令,看起来像这样 <a href ng-click="metric='Distance'; metricshow=false;" > <a href ng-click="metric='Time'; metricshow=false;"> console.log()提供了未定义的。为什么? 在创建控制器时,您没有为$scope.metric分配任何内容,因此它的控制台日志未定义 现在,如果你有类似于: <a href ng-click="doSome
<a href ng-click="metric='Distance'; metricshow=false;" >
<a href ng-click="metric='Time'; metricshow=false;">
console.log()提供了未定义的。为什么? 在创建控制器时,您没有为
$scope.metric
分配任何内容,因此它的控制台日志未定义
现在,如果你有类似于:
<a href ng-click="doSomething()" >
$scope.doSomething = function() {
$scope.metric='Distance';
$scope.metricshow=false;
console.log($scope.metric);
}
在控制器中,您将响应ng单击。在创建控制器时,您没有为
$scope.metric
分配任何内容,因此它的控制台日志未定义
现在,如果你有类似于:
<a href ng-click="doSomething()" >
$scope.doSomething = function() {
$scope.metric='Distance';
$scope.metricshow=false;
console.log($scope.metric);
}
在控制器中,您将响应ng单击。当控制器首次运行时,未创建$scope.metric变量,也未将其分配给任何对象。您可能也不希望在视图中使用逻辑,而是使用函数 指令:
<a href ng-click="setMetric('Distance')" >
<a href ng-click="setMetric('Time')">
<a href ng-click="getMetric()">
控制器首次运行时,未创建$scope.metric变量,也未将其分配给任何对象。您可能也不希望在视图中使用逻辑,而是使用函数 指令:
<a href ng-click="setMetric('Distance')" >
<a href ng-click="setMetric('Time')">
<a href ng-click="getMetric()">
派对迟到了,但根据你的原始代码,我也造成了类似的情况
<a href ng-click="metric('Distance')" >
<a href ng-click="metric('Time');">
<script>
$scope.metric = function(_parm){
switch(_parm){
case 'Distance':
console.log('Distance');
$scope.metricshow = false;
break;
case 'Time' :
console.log('Time');
$scope.metricshow = false;
break;
}
}
</script>
$scope.metric=函数(\u parm){
开关(_parm){
案例“距离”:
console.log('Distance');
$scope.metricshow=false;
打破
案例“时间”:
console.log('Time');
$scope.metricshow=false;
打破
}
}
为了便于参考,请使用ng click调用函数,然后更改其中的变量。更可读,更漂亮的HTML端 派对迟到了,但根据你的原始代码,我也造成了类似的情况
<a href ng-click="metric('Distance')" >
<a href ng-click="metric('Time');">
<script>
$scope.metric = function(_parm){
switch(_parm){
case 'Distance':
console.log('Distance');
$scope.metricshow = false;
break;
case 'Time' :
console.log('Time');
$scope.metricshow = false;
break;
}
}
</script>
$scope.metric=函数(\u parm){
开关(_parm){
案例“距离”:
console.log('Distance');
$scope.metricshow=false;
打破
案例“时间”:
console.log('Time');
$scope.metricshow=false;
打破
}
}
为了便于参考,请使用ng click调用函数,然后更改其中的变量。更可读,更漂亮的HTML端 所以,正如其他答案所说,这是因为
console.log
正在立即执行
我想多说几点:
ng click的函数,而不是内联js代码
{{variable}}
进行$scope
插值$watch
功能$scope
插值
因此,$scope
是控制器和控制器上JS代码之间的粘合剂。您不需要放置{{$scope.variable}
,因为$scope
成为标记处的全局变量
这对于应用程序逻辑非常有用,例如,在使用ng repeat
时非常有用,或者仅用于快速调试
$watch
功能
您可以在控制器上:
$scope.setMetric = function (type) {
$scope.metric = type;
}
$scope.getMetric = function () {
console.log($scope.metric);
}
$scope.$watch('metric', function(newValue, oldValue){
console.log("$scope.metric just changed from " + oldValue + " to " + newValue);
});
这对于更加抽象的应用程序逻辑、工作流和控制非常有用。但你不应该为了调试而这么做
关于您最后的问题,请检查关于数据绑定和摘要周期的文档。因此,正如其他答案所述,这是因为控制台.log正在立即执行 我想多说几点:
ng click的函数,而不是内联js代码
{{variable}}
进行$scope
插值$watch
功能$scope
插值
因此,$scope
是控制器和控制器上JS代码之间的粘合剂。您不需要放置{{$scope.variable}
,因为$scope
成为标记处的全局变量
这对于应用程序逻辑非常有用,例如,在使用ng repeat
时非常有用,或者仅用于快速调试
$watch
功能
您可以在控制器上:
$scope.setMetric = function (type) {
$scope.metric = type;
}
$scope.getMetric = function () {
console.log($scope.metric);
}
$scope.$watch('metric', function(newValue, oldValue){
console.log("$scope.metric just changed from " + oldValue + " to " + newValue);
});
这对于更加抽象的应用程序逻辑、工作流和控制非常有用。但你不应该为了调试而这么做
关于您最后的问题,请检查数据绑定和摘要周期上的文档。何时调用
console.log
?您如何在HTML中声明控制器及其使用?请你把{{metric}}
放在锚标记的正后方,我正在{{metric}获取值。但是不使用$scope是导致这个问题的原因。我再次相信,请告诉我console.log放在控制器的起始位置。我明白了,程序第一次运行的时候$范围度量是未定义的。你能告诉我一件事吗,比如先运行什么。html或控制器。或者两者都是在遇到时执行的。我为您提供了一个答案,告诉您一些额外的细节什么时候调用了console.log
?您如何在HTML中声明控制器及其使用?请你把{{metric}}
放在锚标记的正后方,我正在{{metric}获取值。但是不使用$scope是导致这个问题的原因。我再次相信,请告诉我console.log放在控制器的起始位置。我明白了,程序第一次运行的时候$范围度量是未定义的。你能告诉我一件事吗,比如先运行什么。html或控制器。或者两者都是在遇到时执行的。我给了你一个答案,告诉你一些额外的细节……啊。。。这与上面的方法相同,并且提供了一种更干净的方法+1.马上好,谢谢。我昨天发现了plnkr.co/。我给你做一个。:)那太好了。fridjon和你之间的通话很艰难。我想知道答案。你疯了吗