UPDATE: По-видимому, устанавливая контроллер на вид такого ng-controller="SomethingController as Ctrl"
, а затем используя его в модели ng-model="Ctrl.myModel"
работает. Что такое f ***?ng-model не относится к моему приложению
Я имел в виду реализовать this specific directive в своем приложении. Это просто требует, чтобы я поместил свою модель в качестве атрибута элемента как ng-model="myModel"
, и он должен работать. Я вижу примеры его работы, и я тоже работал над jsfiddle.
Однако он просто не хочет работать с моим приложением. Я установил через bower, я включил все файлы в моем index.html
, и я также ввел его angular.module('myApp', ['angular-input-stars'])
.
Теперь проблема заключается в том, что модель работает только в моем приложении. Значение ng-model="myModel"
использует значение myModel
и устанавливает правильное количество звезд, но как только я меняю звезды (в и через директиву), это значение не возвращается обратно в мою модель.
Я проверил код дИРЕКТИВЫ и они используют контроллер модели установить значение:
function link(scope, element, attrs, ngModelCtrl) {
//...
scope.setValue = function (index, e) {
//...
ngModelCtrl.$setViewValue(scope.last_value);
}
}
И хотя директива не включает в return
, что scope: {ngModel: '='}
, это по-прежнему работает на примерах и jsFiddle , хотя я действительно не понимаю $setViewValue
(даже после изучения этого).
Я думаю, что это может иметь какое-то отношение к архитектуре моего приложения, но я не уверен. Приложение является очень надежным и хорошо структурирована, и я не могу показать его код (код компании), но я могу сказать, как мы структурировали его:
|-- app.js (contains directive module, show bellow)
|-- index.html
|-- /modules
|-- /something
|-- /overview
|-- somethingController.js
(included in index.html & loaded through directive)
|-- somethingDirective.js
(included in index.html & loaded through app.js module)
|-- somethingView.html
(loaded through directive)
app.js код:
var app = angular.module('myApp', [
'angular-input-stars',
'something.overview'
]);
somethingDirective. ЯШ:
var somethingOverview = angular.module('something.overview');
somethingOverview.directive('somethingOverviewDirective', function() {
return {
restrict: 'E',
controller: 'SomethingOverviewController',
templateUrl: 'modules/something/overview/somethingOverviewView.html',
scope: {
overview: '=overview',
errors: '=errors'
}
};
});
somethingController.js:
var somethingOverview = angular.module('something.overview', []);
somethingOverview.controller('SomethingOverviewController',
['$scope', function ($scope) {
function init() {
$scope.myModel = 5;
}
// ...
init();
}]);
somethingView.html:
<div>
Rating: {{myModel}}
<input-stars max="5" ng-model="myModel"></input-stars>
</div>
Можете ли вы p здесь есть ссылка на jsfiddle? – Jesper
Самая большая разница только в том, что в jsfiddle я использую «myCtrl как Ctrl», а затем использую «Ctrl» для доступа к модели. Может ли это так? И если да, то как я могу сделать это «как», когда представление загружается директивой? Здесь: https://jsfiddle.net/filipetedim/14f05jdb/1/ – Ted
Вы нарушаете золотое правило всегда иметь точку в ng-модели. Примитивы не имеют наследования. Посмотрите 3-минутное видео в ответ на http: // stackoverflow.com/questions/17606936/angularjs-dot-in-ng-model – charlietfl