私のページには次のHTMLがあります
<div data-personselect="" data-ng-model="selectedPersonName" data-person="currentOwnership.Person" data-id="currentOwnership.PersonId"></div>
これは、私が次のように定義した person ディレクティブを使用しています。
'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
};
});
});
一番下に、id 用と person 用の 2 つのプロパティを含む分離スコープを定義したことがわかります。この分離されたスコープは = を使用しているため、ページの html から設定されているプロパティに双方向でバインドする必要があります。私の例では currentOwnership.Person と currentOwnership.PersonId です。
人を選択すると、 $scope.selectItem メソッドが呼び出され、 $scope.person および $scope.id プロパティを正しく設定していますが、親スコープの currentOwnership.Person および currentOwnership.PersonId プロパティは設定されていませんかわった。
ここで何が欠けていますか