双向绑定在AngularJS指令中不起作用

双向绑定在AngularJS指令中不起作用,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我的页面上有以下HTML <div data-personselect="" data-ng-model="selectedPersonName" data-person="currentOwnership.Person" data-id="currentOwnership.PersonId"></div> 您可以在底部看到,我定义了一个独立的作用域,它包含两个属性,一个用于id,一个用于person。这个独立的作用域使用=因此它应该双向绑定到从页面上的html设置的属

我的页面上有以下HTML

<div data-personselect="" data-ng-model="selectedPersonName" data-person="currentOwnership.Person" data-id="currentOwnership.PersonId"></div>
您可以在底部看到,我定义了一个独立的作用域,它包含两个属性,一个用于id,一个用于person。这个独立的作用域使用=因此它应该双向绑定到从页面上的html设置的属性;在我的示例中,currentOwnery.Person和currentOwnery.PersonId

现在,当我选择一个人时,将调用$scope.selectItem方法,并且我正在正确设置$scope.person和$scope.id属性,但是父范围中的CurrentOwnery.person和CurrentOwnery.PersonId属性没有被更改


我在这里遗漏了什么呢?

IMHO,问题在于您的父范围,因为它不包括
currentOwnership.PersonId
项。换句话说,您正在将模板作用域属性与父作用域的不存在属性绑定


我已更新了您的属性,包括控制器作用域中的
CurrentOwnery.PersonId
属性,它看起来可以正常工作。

请尝试console.logging$scope和$scope.$parent以查看您是否正在更新变量的本地作用域版本,或者正确的父作用域变量。我正在更新指令中的局部作用域变量$scope.person,但当我查看父作用域时,它并没有更新该变量。实际上是parent.parent包含了我试图更新的变量,因为顶部的html位于另一个指令的内部,该指令的作用域被设置为“=”,您可以创建一个plunkr或jsfiddle@PaulCavacas!有了它,我们将更容易帮助您尽快。当然在这里。有两个警报框,您可以取消注释并看到它正在更改和设置本地范围变量,但顶级警报框没有更改
'use strict';

define(['app'], function (app) {
    app.directive('personselect', function (personDataService) {
        var link = function ($scope, $element, $attr) {
            $scope.names = [];

            $scope.getNames = function (name) {
                return personDataService.FullNameSearch({ name: name, pageSize: 10 })
                    .then(function (sourceData) {
                        $scope.names = sourceData;
                        return sourceData;
                    }, function (error) {
                        config.logger.error(config.errorMessage("search"));
                    });
            };

            $scope.selectItem = function () {
                //$scope.$parent.$parent[$attr.person.split('.')[0]][$attr.person.split('.')[1]]
                $scope.person = findPerson($scope[$attr.ngModel]);
                $scope.id = $scope.person == undefined ? undefined : $scope.person.id;
            };

            function findPerson(itemToFind) {
                var item = _.find($scope.names, function (member) {
                    return member.name == itemToFind;
                });
                if (item == undefined) return undefined;
                return item;
            }

        };


        return {
            restrict: 'A',
            replace: true,
            scope: {
                id: '=',
                person: '=',
                defaultName: '='
            },
            templateUrl: 'app/views/templates/people/personSelect.html',
            link: link
        };
    });
});