Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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
Angularjs 将表单值传递给不工作的函数_Angularjs - Fatal编程技术网

Angularjs 将表单值传递给不工作的函数

Angularjs 将表单值传递给不工作的函数,angularjs,Angularjs,编辑:当我在表单中更改ng model=“$parent.selectedAnswer”时,它可以工作。如果有人能解释的话,我会记下来作为答案 我试图在单击“下一步”按钮时将选定的单选按钮值收集到角度函数,但它始终未定义。我真的搞不懂怎么了。单选按钮和值在html中正确填充。只有当单击“下一步”并尝试传入所选值时,它才会失败 我的逻辑很简单:每个单选按钮的值都是[branchid、leafid、answerid]的数组。单击next时,我尝试将该值绑定到“selectedAnswer”模型,并将

编辑:当我在表单中更改ng model=“$parent.selectedAnswer”时,它可以工作。如果有人能解释的话,我会记下来作为答案

我试图在单击“下一步”按钮时将选定的单选按钮值收集到角度函数,但它始终未定义。我真的搞不懂怎么了。单选按钮和值在html中正确填充。只有当单击“下一步”并尝试传入所选值时,它才会失败

我的逻辑很简单:每个单选按钮的值都是[branchid、leafid、answerid]的数组。单击next时,我尝试将该值绑定到“selectedAnswer”模型,并将其传递给angularjs端的next()函数

以下是相关代码:

app.controller('GameNode',函数($scope,$http){
功能负载(选择的电源){
变量leafId=0,branchId=0,answerId=0;
警报(selectedAnswer);//这始终是未定义的
if(selectedAnswer!==undefined&&selectedAnswer!=null){
branchId=selectedAnswer[0];
leafId=selectedAnswer[1];
answerId=selectedAnswer[2];
}
$http.get(“/AccountRequest/GetNode?branchId=“+branchId+
“&leafId=“+leafId+
“&answerId=“+answerId”)
.成功(功能(数据){
$scope.node=数据;
});
}
$scope.next=加载;
加载();
});
-------------------------------------html端-----------------------------------


{{node.Question.Text}
{{answer.Text}

如果在控制器中定义$scope.selectedAnswer,是否解决了问题

app.controller('GameNode', function ($scope, $http) {
    $scope.selectedAnswer = null;
    function load(selectedAnswer) {
        var leafId = 0, branchId = 0, answerId = 0;
        alert(selectedAnswer); //this is always undefined
        if (selectedAnswer !== undefined && selectedAnswer != null) {
            branchId = selectedAnswer[0];
            leafId = selectedAnswer[1];
            answerId = selectedAnswer[2];
        }

        $http.get("/AccountRequest/GetNode?branchId=" + branchId +
            "&leafId=" + leafId +
            "&answerId=" + answerId)
            .success(function(data) {
                $scope.node = data;
            });
    }

    $scope.next = load;
    load();
});

如果没有,请创建一个JSFIDLE供我们使用。

我认为这是因为ng repeat为每个项目创建了一个新的子范围,并且由于
selectedAnswer
没有在重复项目之外初始化
selectedAnswer
将始终在父范围中
未定义。您可以通过执行以下操作来解决此问题:


{{node.Question.Text}
{{answer.Text}

由于作者的声誉,我不会冒险回答这个问题。:-)对不起,你什么意思?哈哈,刚刚看到了!刚刚拍了一张截图。这很重要!!编辑后,您的问题是“请解释angular scope系统和javascript原型继承”。@Riz,不需要截图。您可以使用Firebug进行更改。;-)这很奇怪。我尝试了你们两人建议的改变,但没有成功。但当我更改ng模型=“$parent.selectedAnswer”时,它就起作用了。没有做任何其他更改!如果你们中有人能解释的话,我会把它作为一个答案。我已经修正了我的答案,我在ng模型中漏掉了一个点。在执行双向绑定时,不应直接绑定到scope属性,否则绑定可能会在子作用域中中断。请看Misko的视频:非常感谢您花时间解释正确的方法:)