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代码
  • 在HTML中,您可以使用
    {{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代码
  • 在HTML中,您可以使用
    {{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和你之间的通话很艰难。我想知道答案。你疯了吗