Ich habe gerade eine Angular JS-Fabrik erstellt (unten ist der Code), die Daten für zwei datepickers (ui.bootstrap's Elemente) zurückgibt und an meinen HTML-Code binden, aber wenn ich bin versuchen, die Rückkehr $scope
Objekt von der Fabrik in der Steuerung zu ändern es funktioniert nicht, ich meine, ich kann nicht auf die $scope.Date1
oder $scope.Date2
Objekte zugreifen, die in der Steuerung verfügbar sind (von der Fabrik zurückgegeben). Angularjs Fabrikdaten oder Objekt nicht direkt in der Steuerung zugreifen
var MyApp = angular.module("TestApp", ["ui.bootstrap"]);
angular.module('TestApp').factory('FirstFactory', function() {
return {
TwoDates: function(scope) {
scope.clear = function() {
scope.Date1 = null;
scope.Date2 = null;
};
scope.inlineOptions1 = {
customClass: getDayClass,
minDate: new Date(),
// showWeeks: true
};
scope.inlineOptions2 = {
customClass: getDayClass,
minDate: new Date(),
// showWeeks: true
};
scope.dateOptions1 = {
//dateDisabled: disabled,
formatYear: 'yyyy',
maxDate: new Date(2050, 7, 22),
minDate: new Date(),
startingDay: 1
};
scope.dateOptions2 = {
//dateDisabled: disabled,
formatYear: 'yyyy',
maxDate: new Date(2050, 5, 22),
minDate: new Date(),
//minDate: new Date($scope.changeMin()),
startingDay: 1
};
scope.toggleMin = function() {
scope.inlineOptions1.minDate = scope.inlineOptions1.minDate ? null : new Date();
scope.dateOptions1.minDate = scope.inlineOptions1.minDate;
var min2 = new Date();
scope.$watch('Date1', function() {
min2 = scope.Date1;
scope.dateOptions2.minDate = min2;
if (scope.Date1 > scope.Date2) {
// debugger;
scope.Date2 = scope.Date1;
console.log("Yes It's greater");
}
// console.log(min2);
});
scope.$watch('Date2', function() {
if (scope.Date2 < scope.Date1) {
//debugger;
scope.Date1 = scope.Date2;
console.log("Yes It's lesser");
}
// console.log(max1);
});
};
scope.toggleMin();
scope.open1 = function() {
scope.popup1.opened = true;
};
scope.open2 = function() {
scope.popup2.opened = true;
};
scope.popup1 = {
opened: false
};
scope.popup2 = {
opened: false
};
scope.setDate = function(year, month, day) {
scope.Date1 = new Date(year, month, day);
scope.Date2 = new Date(year, month, day);
};
scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd-MM-yyyy', 'shortDate'];
scope.format = scope.formats[2];
scope.altInputFormats = ['M!/d!/yyyy'];
function getDayClass(data) {
var date = data.date,
mode = data.mode;
if (mode === 'day') {
var dayToCheck = new Date(date).setHours(0, 0, 0, 0);
for (var i = 0; i < scope.events.length; i++) {
var currentDay = new Date(scope.events[i].date).setHours(0, 0, 0, 0);
if (dayToCheck === currentDay) {
return scope.events[i].status;
}
}
}
return '';
}
}
};
});
angular.module('TestApp').controller('StartDate', function($scope, $log, FirstFactory) {
//debugger;
FirstFactory.TwoDates($scope);
//or
console.log($scope.Date1);
});
<fieldset>
<form name="MeForm" novalidate>
<div ng-controller="StartDate">
<div class="row">
<div class="col-md-3">
<div>
<p class="input-group">
<input type="text" name="fdate" class="form-control" uib-datepicker-popup="{{format}}" ng-model="Date1" is-open="popup1.opened" datepicker-options="dateOptions1" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="open1()"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
<p class="error validationerror" ng-show="MeForm.fdate.$invalid && MeForm.fdate.$touched">First date is required</p>
</p>
</div>
<input type="text" [ng-value="Date1" ] />@*{{Date1 | date: 'dd-MM-yyyy'}}*@
<div>
<p class="input-group">
<input type="text" name="ldate" class="form-control" uib-datepicker-popup="{{format}}" ng-model="Date2" is-open="popup2.opened" datepicker-options="dateOptions2" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="open2()"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
<p class="error validationerror" ng-show="MeForm.ldate.$invalid && MeForm.ldate.$touched">Last date is required</p>
</p>
</div>
@*{{Date2 | date: 'dd-MM-yyyy'}}*@
</div>
</div>
</div>
<div>
<input type="text" name="firstname" ng-required="true" ng-model="user.firstname" placeholder="Enter your first name" class="form-control" />
<p class="error validationerror" ng-show="MeForm.firstname.$invalid && MeForm.firstname.$touched">You must fill out your first name</p>
<br />
<input type="text" name="lastname" ng-required="true" ng-model="user.lastname" placeholder="Enter your first name" class="form-control" />
<p class="error validationerror" ng-show="MeForm.lastname.$invalid && MeForm.lastname.$touched">You must fill out your last name</p>
<br />
<button type="submit" class="btn submitbtn">Submit</button>
</div>
</form>
</fieldset>
Soweit ich weiß, wenn Sie $ rootScope direkt in die Fabrik 'app.factory (" myFactory ", Funktion ($ rootScope) {}) injizieren' es wird funktionieren. Auf $ scope kann nicht zugegriffen werden, selbst wenn Sie es übergeben. Wie auch immer, welchen Fehler bekommst du? – Gary
Ich bekomme keinen Fehler mit meinem Code, aber wenn ich selbst das $ scope Objekt an die Fabrik übergebe und die gleiche Fabrik an einen Controller einschicke (wie Sie in obigem Code sehen können), versuche ich, auf das in meinem zuzugreifen Controller, der nicht passiert. Meine Hauptabsicht besteht darin, auf das Datum1 und das Datum2 innerhalb der Controller zuzugreifen, so dass ich sie jedem anderen Objekt zuweisen kann, das ich in demselben Controller erstellen werde. – Khan
angular.module ('TestApp'). Controller ('StartDate', Funktion ($ scope, $ log, FirstFactory) { // Dies funktioniert und es gibt tatsächlich Date1 und Date2 zurück, die ich aus meiner Sicht verwende (siehe oben) html code) FirstFactory.TwoDates ($ scope); // Aber das möchte ich, was nicht funktioniert .. console.log ($ scope.Date1); // damit kann ich $ scope.dt1 = $ zuweisen scope.Date1 }); – Khan