У меня есть набор из двух функций, которые я должен выполнить для поиска пользователя. В моем приложении мне нужно сделать это для нескольких ролей (например, реквестер, процессор и т. Д.). Я думаю, что хочу создать директиву, чтобы я мог повторно использовать код, не копируя и не изменяя его для каждой роли - если я понимаю концепцию директивы.Создание директивы Angularjs
Я сделал попытку, но вместо поля ввода, фактически отображающего для меня имя, я вижу имя файла шаблона html. Я, очевидно, что-то делаю неправильно, но поскольку я очень новичок в директивах (обычай и создаю их), я уверен, что не сделал это правильно.
Что я хочу - это возможность вводить имя человека, а при вводе он должен вызывать функцию, выполняющую фактический поиск. В то время как матч ищет, я хочу, чтобы скользящая панель появлялась, чтобы показать, что что-то происходит. После того, как я выберу подходящего пользователя, я хочу, чтобы имя и идентификатор были сохранены в моей модели, и панель закрывается.
Это то, что я положил в моем HTML, чтобы назвать мою директиву:
<name-user idModel="request.requesterID" nameModel="request.requester"></name-user>
requesterId и запрашивающая находятся там, где я хочу, чтобы результаты ....
Моя директива:
app.directive('nameUser', function() {
return {
restrict: 'E',
require: {
idModel : '=',
nameModel : '='
},
template : 'app/views/nameUser.html',
link : function($scope){
$scope.searchName = function(searchQuery, bar){
var bar = "#loadingBar" + bar;
if(searchQuery && searchQuery.length >= 3){
$(bar).slideDown();
$http.get("/read/userinfo/" + searchQuery).success(function(data){
$scope.nameSearchResults = data;
$(bar).slideUp();
});
}
}
$scope.selectName = function(pl){
nameModel.$setViewValue(pl.name);
idModel.$setViewValue(pl.user_id);
$scope.nameSearchResults = {};
}
}
};
});
Мой шаблон имеет:
<input type="text" class="form-control input-md" ng-model="nameModel" ng-model-options='{ debounce: 800 }' ng-change="searchName(nameModel,'88')" value="nameModel"/>
<div class="row" style="padding:20px;display:none;" id="loadingBar88">
<div class="col-md-6 col-md-offset-5">
<img alt="Brand" src="files/img/loader.gif">
</div>
</div>
<table class="table table-bordered table-hover" ng-show="nameSearchResults.length">
<tr>
<th>User ID</th>
<th>User Name</th>
</tr>
<tr ng-repeat="entry in nameSearchResults" ng-click="selectName(entry)">
<td>{{entry.user_id}}</td>
<td>{{entry.name}}</td>
</tr>
В настоящее время, каждый раз, когда я нужен другой идентификатор пользователя/имя для роли, я должен скопировать функции и изменять имена и номер бара. .. Я действительно думаю, что должен быть способ сделать это, поэтому я могу назвать его несколько раз и просто передать в значениях модели, которые я хочу. Хотя код выше не дает мне никаких ошибок, он не дает мне поля ввода и функциональности для выполнения поиска .... пожалуйста, помогите.
Одна из проблем заключается в том, что директивы смешны в соглашениях об именах - так что у вас есть переменные области выделения idModel и 'nameModel' - когда вы используете em в своей реализации - они должны быть' 'Другая проблема, которую я вижу, состоит в том, что' = 'обозначает двустороннюю привязку, поэтому она ожидает объект - не строку, как кажется, у вас есть - как параметр. Jsfiddle может быть полезен здесь, чтобы помочь вам дальше. –
В дополнение к тому, что упомянул @Kevin Friedheim, некоторые другие проблемы - это ключ 'require', вместо этого должен быть« scope ». Кроме того, он должен быть 'templateUrl' вместо' template'. – PSWai
спасибо Я попробую все ваши предложения/исправления. @Kevin - да, я передаю строку, к которой привязаны мои данные ... так что это не сработает? если я только хочу обновить конкретные значения полей всего моего объекта данных, как бы я это сделал? (если я полностью не понимаю, что вы имеете в виду).Весь мой объект запроса имеет различные роли, которые могут быть назначены в нем, которые являются целыми. – user3861284