代码之家  ›  专栏  ›  技术社区  ›  amal

将传递的函数参数附加到控制器内的$scope

  •  2
  • amal  · 技术社区  · 9 年前

    我有一个 ng-click="myMethod(parameter)" 内部 <button> 要素我想用这个 parameter ,在我的例子中,它是控制器中的一个字符串,这样我就可以执行以下操作 $scope.parameter.subProperties 在它上面。因此,事实上,这个参数实际上是现有$scope.object的别名。

    所以我的目标是重用这个 myMethod() 在不同的地方 ng-click 在中 <按钮> 并对相应的 $scope 参数 名称

    用于查找 object1 控制器内部将是:

    .controller('MyCtrl', function($scope){
        $scope.object1;
        $scope.object2;
        $scope.myMethod = function(arg){
            var length = $scope.arg.length;
        };
    })
    

    这里,作为参数传递的值可以是这样的一个对象名称:

    <button ng-click="myMethod(object1)">Find Length</button>

    感谢任何帮助,谢谢。

    3 回复  |  直到 9 年前
        1
  •  2
  •   Shaishab Roy    9 年前

    你应该使用 括号记法 [] 而不是 点表示法 . 喜欢 $scope[arg].length 访问 动态变量

    $scope.myMethod = function(arg){
       var length = $scope[arg].length;
    };
    

    并且应该使用 parameter 作为字符串使用 ng-click="myMethod('parameter')" 而不是 ng-click="myMethod(parameter)"

        2
  •  1
  •   GG.    9 年前

    您需要使用 括号记法 当你有一个动态密钥时。

    $scope.object1;
    
    $scope.myMethod = function (arg) {
        var length = $scope[arg].length;
    };
    

    但您必须向函数传递一个字符串。

    <button ng-click="myMethod('object1')">Find Length</button>
    
        3
  •  1
  •   Mike Feltman    9 年前

    如果我在跟踪你,你想要这样的东西:

        <div ng-controller="myController as foo">
           <button ng-click="foo.clickyclicky('barney')">Barney</button>
           <button ng-click="foo.clickyclicky('fred')">Fred</button>
        </div>
    

    那么你的控制器看起来像这样:

        function myController() {
            var vm=this;
            vm.barney = {};
            vm.barney.wife = "Betty"
            vm.fred = {};
            vm.fred.wife = "Wilma" 
    
           function clickyclicky(who) {
               var hubby = vm[who]
               alert(hubby.wife) 
            }
        };