Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:ng click参数未定义,位于ng repeat内_Javascript_Angularjs_Angularjs Ng Repeat_Angularjs Ng Click - Fatal编程技术网

Javascript 角度:ng click参数未定义,位于ng repeat内

Javascript 角度:ng click参数未定义,位于ng repeat内,javascript,angularjs,angularjs-ng-repeat,angularjs-ng-click,Javascript,Angularjs,Angularjs Ng Repeat,Angularjs Ng Click,当我试图将参数从ng click传递到我的函数时,遇到了一个问题。我找不到我的情人。我是Angular.js的新学员。所以我想我可能对ng缺乏基本的了解,在ng重复中点击。如果有人能帮忙,我将非常感激。多谢各位 视图: 路线: $routeProvider.when('/user', { controller: 'userRecipeController as urCtrl', templateUrl: 'app/views/urView.html

当我试图将参数从ng click传递到我的函数时,遇到了一个问题。我找不到我的情人。我是Angular.js的新学员。所以我想我可能对ng缺乏基本的了解,在ng重复中点击。如果有人能帮忙,我将非常感激。多谢各位

视图:

路线:

$routeProvider.when('/user', {
            controller: 'userRecipeController as urCtrl',
            templateUrl: 'app/views/urView.html'
        })
控制台:

更新: 谢谢大家的帮助。我对开发人员的世界是如此陌生,所以我花了一些时间来学习JSFIDLE并将代码放在那里。即使我为外部资源添加了angular,也为框架添加了angular,我仍然无法让它工作。但我还是把小提琴放在这里,如果有人认为它有用的话。我稍微修改了一下我的原始代码

jsFIDLE

尝试更换

function init() {

        ....

      $scope.deleteRecipe = function(data){
        console.log("this is recipe: ", data);
      };
    };

    init();

并将其用作

 ng-click="init.deleteRecipe(id)"

看起来您需要使用
urCtrl.deleteRecipe(recipe.id)
,因为您使用的是
controller as
,因此每次引用控制器中的任何内容时,都需要使用决定使用的变量名

查看
控制器as

更新:

好的,谢谢你的邀请!正是我们需要的

你那把小提琴唯一的毛病是:

1) 在控制器中定义配方时,您指的是
。当您使用
控制器作为
语法时,仅参考
。请查看上面的详细信息

2) 您有语法错误-您有
};)而不是
})

除此之外,您的逻辑和AngularJS结构很好,所以没什么大不了的:)


如果仍然有问题,请告诉我

将控制器用作时,您可以将该方法放在控制器上:

(function userRecipeControllerIIFE() {

var UserRecipeController = function($scope, likeRecipesFactory, recipesFactory, appSettings) {

    function init() {

        ....

      $scope.deleteRecipe = function(data){
        console.log("this is recipe: ", data);
      };
    };

    init();
};

UserRecipeController.$inject = ['$scope', 'likeRecipesFactory', 'recipesFactory', 'appSettings'];

angular.module('recipesApp').controller('userRecipeController', UserRecipeController);
})();
var UserRecipeController = function($scope, likeRecipesFactory, recipesFactory, appSettings) {

    this.deleteRecipe = function(data){
        console.log("this is recipe: ", data);
    };

    function init() {
        ....
    };

    init();
};
然后在你的html中

<button ng-click="urCtrl.deleteRecipe(recipe.id)">Delete</button>
删除
我不认为这会导致您的问题,但您可能希望将该按钮包装在TD标签中,因为您可能会遇到一些意外的布局问题

<td><button ng-click="urCtrl.deleteRecipe(recipe.id)">Delete</button></td>
删除
此外,它可能也不会引起你的问题,但正如其他人所建议的,你可能希望传递整个“配方”

删除

原因是,HTML实际上不需要知道控制器如何删除配方。例如,按照您的方式,如果您假设更改应用程序,使配方上有delete()方法,则必须更改视图和控制器。如果您传递整个配方,您的视图将不需要任何更改。

请尝试使用ng click=“$parent.deleteRecipe(recipe.id)”。

您可以显示整个控制器以及您将控制器附加到的标记吗?从外观上看,您在某些时间使用
控制器作为
,而不是其他时间。是否确实填充了
id
字段?尝试传递整个对象
deleteRecipe(recipe)
查看是否得到任何结果。另外-使用
vm
$scope
有什么意义?我已经按照您的建议更新了整个控制器。感谢you@TedThe已填充每个配方的id。我按照您的建议将参数从recipe.id更改为recipe,但仍然没有定义。感谢you@Muli Yulzary@tina你能创建一个plunkr吗?OP使用的第一件事是
controllerAs
模式,他不应该在控制器中混用
$scope
。改变你的建议不会有任何改变。。虽然代码OP应该可以工作,但我刚刚尝试过,仍然没有定义。谢谢。您的观点是正确的,OP不应该同时使用
controllerAs
$scope
,尽管OP代码应该可以工作。我将deleteRecipe(recipe.id)更改为urCtrl.deleteRecipe(recipe.id),单击按钮后,什么也没有发生,没有出现控制台消息。因此,我将控制器中的$scope更改为vm(与此相等),并且再次未定义@Ted@tina您确定vm等于此值吗?因为在最新版本中,您删除了
var vm=this
。(我不是怀疑你,我只是想确定:)@Ted是的。我在这里只删除了var vm=这一行,因为这一行会让人感到困惑。@tina okay有道理:)正如其他人所提到的,如果你创建了一个plunkr或Fiddle,看起来对我们非常有益。我按照你的建议更改了视图和控制器操作,但我仍然没有定义。关于传回整个配方对象,而不仅仅是id部分,你们是绝对正确的,我将recipe.id改为recipe,但我仍然没有定义。谢谢你的建议。@mcgraghixI认为我们都需要看一把正在工作的小提琴或plunkr才能提供更多帮助。我试过$parent,但仍然没有定义…谢谢你的建议。
var UserRecipeController = function($scope, likeRecipesFactory, recipesFactory, appSettings) {

    this.deleteRecipe = function(data){
        console.log("this is recipe: ", data);
    };

    function init() {
        ....
    };

    init();
};
<button ng-click="urCtrl.deleteRecipe(recipe.id)">Delete</button>
<td><button ng-click="urCtrl.deleteRecipe(recipe.id)">Delete</button></td>
<td><button ng-click="urCtrl.deleteRecipe(recipe)">Delete</button></td>