Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 AngularJs:在指令之间共享模型数据_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJs:在指令之间共享模型数据

Javascript AngularJs:在指令之间共享模型数据,javascript,angularjs,Javascript,Angularjs,我似乎无法在Angular指令中找到合适的绑定。我有以下代码: html 请点击此处: 有四个h2,每个h2都绑定到它们自己的chore对象。我想要的是能够单击其中一个h2,将单个chore绑定到控制器的作用域(并用chore的模型数据填充输入),对其中一个输入元素进行更新,单击“更新名称”按钮,并让该模型数据更新所单击的h2。您的对象是{chore:chore},因此您应该在警报中引用chore.chore.name而不是chore.name $scope.updateName = funct

我似乎无法在Angular指令中找到合适的绑定。我有以下代码:

html

请点击此处:


有四个h2,每个h2都绑定到它们自己的
chore
对象。我想要的是能够单击其中一个h2,将单个
chore
绑定到控制器的作用域(并用
chore
的模型数据填充输入),对其中一个输入元素进行更新,单击“更新名称”按钮,并让该模型数据更新所单击的h2。

您的对象是
{chore:chore}
,因此您应该在警报中引用chore.chore.name而不是chore.name

$scope.updateName = function (chore) {
    alert('okay ' + chore.chore.name);
    //$scope.Chore.color = 'pink';
};
或者,您可以更改传递信息的方式:

clicky-thing='updateName(chore)'
另外,$scope.clickyThing实际上引用了一个可执行函数,该函数包含一个使用clicky thing属性中的文本创建的函数,您只需要在不带任何参数的情况下执行它

elem.bind('click', function () {
    scope.clickyThing();
});


除非您所做的不仅仅是执行传入的代码,否则您可能只需使用ng单击即可。

您的对象是
{chore:chore}
,因此您应该在警报中引用chore.chore.name而不是chore.name

$scope.updateName = function (chore) {
    alert('okay ' + chore.chore.name);
    //$scope.Chore.color = 'pink';
};
或者,您可以更改传递信息的方式:

clicky-thing='updateName(chore)'
另外,$scope.clickyThing实际上引用了一个可执行函数,该函数包含一个使用clicky thing属性中的文本创建的函数,您只需要在不带任何参数的情况下执行它

elem.bind('click', function () {
    scope.clickyThing();
});


除非您所做的不仅仅是执行传入的代码,否则您可能只需使用ng单击即可。

下面是一个更新的提琴:

更新指令:

app.directive("announce", function () {
    return {
        restrict: "A",
        scope: {
            clickyThing: '&',
            chore: '='
        },
        link: function (scope, elem, attrs) {
            var chore = scope.chore;
            elem.bind('click', function () {

                scope.clickyThing(chore);
            });
        }
    };
});
解决的问题:

  • 您已经为announce指令声明了一个独立的作用域,但是还没有将'chore'模型导入到您的独立作用域中-但是您在执行clickyThing()时引用了chore。我已经更改了它,以便您的指令导入'chore'模型
  • 您使用{chore:chore}作为传递给单击处理程序的模型-这不是必需的。我已经更改了它,以便它直接传递模型
  • 在updateName()方法中,它是从角度上下文外部调用的,因此我将chore的赋值包装在$apply块中。这确保在代码执行后触发$digest

  • 我同意凯文的观点,你可能应该改用ng click。

    这里是一个更新的提琴:

    更新指令:

    app.directive("announce", function () {
        return {
            restrict: "A",
            scope: {
                clickyThing: '&',
                chore: '='
            },
            link: function (scope, elem, attrs) {
                var chore = scope.chore;
                elem.bind('click', function () {
    
                    scope.clickyThing(chore);
                });
            }
        };
    });
    
    解决的问题:

  • 您已经为announce指令声明了一个独立的作用域,但是还没有将'chore'模型导入到您的独立作用域中-但是您在执行clickyThing()时引用了chore。我已经更改了它,以便您的指令导入'chore'模型
  • 您使用{chore:chore}作为传递给单击处理程序的模型-这不是必需的。我已经更改了它,以便它直接传递模型
  • 在updateName()方法中,它是从角度上下文外部调用的,因此我将chore的赋值包装在$apply块中。这确保在代码执行后触发$digest

  • 我同意Kevin的观点,您可能应该改用ng click。

    首先,您的输出是Dude,输出很奇怪(这是本代码中一次奇怪旅程的结果),但它是正确的。它可以很容易地更改为您的对象是{chore:chore},因此,您应该在警报中引用chore.chore.name而不是chore.name。首先,您的输出是Dude。输出很奇怪(这是本代码中一次奇怪旅程的结果),但它是正确的。它可以很容易地更改为您的对象是{chore:chore},因此,您应该在警报中引用chore.chore.name,而不是chore.name。本例中的ng单击为+1。本例中的ng单击是人为的,代表更大的解决方案。本例中的ng单击为+1。本例中的ng单击是人为的,代表更大的解决方案。是否检查了您的小提琴?当c更改颜色值后单击“更新到”按钮,$scope.$apply(以及相关的解释)帮助很大。在方法中定义模型是否是idomatic的?是否最好在$scope.chore下定义$scope.chore(意识到它的命名不好)?是的,在控制器中定义模型并将其分配给作用域是惯用的。或者,模型可以来自服务/工厂-也是可以接受的和良好的实践。我将使用小写作为模型名称的命名约定。是的,我必须欣赏poxelbits的示例方式。它工作得很好。没问题。但是如果我更改颜色并按下下面的按钮,会出现$digest错误,这是错误的。您是否检查了小提琴?在更改颜色值后单击“更新到”按钮时,会出现$digest错误。$scope.$apply(及相关说明)帮助很大。在一个方法中定义一个模型是idomatic吗?在$scope.chore下定义$scope.chore会更好吗(意识到它的命名不好)?是的,在控制器中定义模型并将其分配给作用域是惯用的。或者,模型可以来自服务/工厂-也是可以接受的和良好的实践。我将使用小写作为模型名称的命名约定。是的,我必须欣赏poxelbits的示例方式。它工作得很好。没问题。但是如果我改变颜色并按下下面的按钮会怎么样?它会给出$diegest错误,这是错误的。