Как мы можем передать переменную в изолированной области видимости
У меня есть директива, как показано ниже -
<div data-my-param-control data-save-me="saveMe()"></div>
В директиве controller я связываю функцию saveMe() с контроллером с изолированной областью действия, как показано ниже -
function MyParamControlDirective($filter,
$state,
$stateParams,
$uibModal,
) {
return {
restrict: 'AE',
scope: {
saveMe: '&',
},
templateUrl: 'html/myhtml',
controller: ['$scope', function ($scope) {
$scope.saveMeHandler = function () {
var saveMe = $scope.saveMe();
$uibModal.open({
animation: false,
windowTopClass: '',
templateUrl: 'html/askmyname',
size: 'sm',
resolve: {
saveMe: function () {
return saveMe;
}
},
controller: function (
$scope,
$uibModalInstance,
saveMe,
toastr
)
{
$scope.close = function () {
$uibModalInstance.close();
};
$scope.saveMyName = function() {
$scope.submited = true;
if ($scope.my_name != "undefined" && $scope.my_name != "") {
saveMe();
$scope.close();
} else {
toastr.error('Please enter search name');
}
}
}
});
};
}]
};
}
До сих пор все работает нормально.
Я добавил uibModal в директиву и открыл всплывающее окно, чтобы получить имя. имя входит в переменную $scope.my_name. Теперь я хочу передать это имя в функцию saveMe(). Если я напрямую передам переменную, как saveMe($scope.my_name); это показывает неопределенный в функции контроллера. Ниже приведена функция контроллера -
$scope.saveMe = function () {
//logic here to save data
};
Можете ли вы, ребята, помочь мне, как я могу передать my_name из модального в метод saveMe. заранее спасибо
1 ответ
Используйте локальный при определении выражения:
<custom-directive on-save="saveMe($event)">
</custom-directive>
Внутри директивы вызовите функцию с объектом, который определяет local:
$scope.onSave({$event: message})">
Соглашение для введенных местных жителей должно называть их $
префикс, чтобы отличать их от переменных в родительской области видимости.
ДЕМО
angular.module("app",[])
.directive("customDirective",function() {
return {
scope: {
onSave: '&',
},
template: `
<fieldset>
<input ng-model="message"><br>
<button ng-click="onSave({$event: message})">Save</button>
</fieldset>
`,
};
})
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app">
<custom-directive on-save="message=$event">
</custom-directive>
<br>
message={{message}}
</body>
Из документов:
&
или же&attr
- предоставляет способ выполнить выражение в контексте родительской области. Если имя атрибута не указано, то предполагается, что имя атрибута совпадает с локальным именем. Дано<my-component my-attr="count = count + value">
и определение объема изолятаscope: { localFn:'&myAttr' }
, свойство области видимости изолятаlocalFn
будет указывать на обертку функции дляcount = count + value
выражение. Часто желательно передавать данные из изолированной области через выражение в родительскую область. Это можно сделать, передав карту имен и значений локальных переменных в оболочку выражения fn. Например, если выражениеincrement($amount)
Затем мы можем указать значение суммы, позвонивlocalFn
какlocalFn({$amount: 22})
,