指令:我将隔离范围(“=”)绑定到模板ngModel,但输入不会在控制器上更新

时间:2013-11-04 15:53:31

标签: angularjs angularjs-directive angularjs-scope

我要做的是将隔离范围'指针'直接放在模板中的ngModel上。我期望的是范围变量在父控制器上自动更新。最终发生的是两个变量都被不断地评估为未定义。

我不确定为什么这不能按预期工作,因为具有双向绑定隔离范围意味着对于每个创建的名称,该名称将自动放在范围上(例如,我有inputA,因此范围。 inputA是create)。

我创建了一个日志函数,每当输入中的某些内容发生变化时就会运行,我输出结果...我一直对隔离范围变量inputA和inputB进行未定义。我很困惑;我做错了什么?

模板

<div ng-app="app">
    <div ng-controller="MyCtrl">
        <div my-directive input-A="input.inputA" input-B="input.inputB"></div>
    </div>
    <br/>
    <!-- output input -->
    {{ input | json }}
</div>

指令/控制器

angular.module("app")
.controller("MyCtrl", function($scope){ })
.directive("myDirective", function(){
   return {
        scope: {
            inputA: "=",
            inputB: "="
        },
        template: 'inputA: <input ng-model="inputA" ng-change="log(inputA)"/><br/>'
                 +'inputB: <input ng-model="inputB" ng-change="log(inputB)"/>',
        link: function (scope, element, attrs) {
            scope.log = function (theInput) {
                console.log(theInput);     // outputs correctly
                console.log(scope.inputA); // outputs 'undefined'
                console.log(scope.inputB); // outputs 'undefined'
            };
        }
    } 
});

1 个答案:

答案 0 :(得分:0)

我认为该指令应该被称为:

<div my-directive input-a="input.inputA" input-b="input.inputB"></div>

请注意小写input-ainput-b