angularjs - कोणीयजेएस अपग्रेड(1.5 से 1.6,1.7) निर्देश क्षेत्र को अपरिभाषित बनाता है




angular-directive angular-controller (2)

मेरे पास निम्नलिखित कोड हैं:

angular
  .module('myApp')
  .directive('layout', function () {
      return {
          restrict: 'E',
          template: '<div ng-include="layoutCtrl.pageLayout"></div>',
          controller: 'LayoutController',
          controllerAs: 'layoutCtrl',
          bindToController: true,
          scope: {
              pageLayout: '=',
              pageConfiguration: '=',
              isPreview: '='
          }
      };
  });

angular
  .module('myApp')
  .controller('LayoutController', LayoutController);

function LayoutController($scope, LayoutDTO, LayoutPreviewDTO) {
    var self = this;
    self.layoutDTO = LayoutDTO;
    self.layoutPreviewDTO = LayoutPreviewDTO;
    var test = $scope;

    if(self.isPreview)
        self.layoutModel = new self.layoutPreviewDTO(self.pageConfiguration);
    else
        self.layoutModel = new self.layoutDTO(self.pageConfiguration);
}


<div>
    <layout page-layout="ctrl.layoutTemplateUrl" page-configuration="ctrl.pageConfiguration" is-preview="false"></layout>
</div>

कोणीय 1.5.3 संस्करण में यह अपेक्षित रूप से काम करता है, मेरे नियंत्रक में चर मूल्यों के साथ आ रहे थे। अब, जब से मैंने 1.6.x पर अपग्रेड किया है, self.pageConfiguration अब अपरिभाषित है।

कोणीय संस्करण के अलावा कुछ भी नहीं बदला है।

मैं अपने नियंत्रक में निर्देश में पारित मूल्यों पर एक हैंडल कैसे प्राप्त करूं?


AngularJS की टीम उस कंट्रोलर कोड की सिफारिश करती है जो स्कोप बाइंडिंग पर निर्भर करता है, उसे $onInit फ़ंक्शन में ले जाया जाता है।

function LayoutController($scope, LayoutDTO, LayoutPreviewDTO) {
    var self = this;
    this.$onInit = function () {
        // bindings will always be available here
        // regardless of the value of `preAssignBindingsEnabled`.
        self.layoutDTO = LayoutDTO;
        self.layoutPreviewDTO = LayoutPreviewDTO;
        var test = $scope;

        if(self.isPreview)
            self.layoutModel = new self.layoutPreviewDTO(self.pageConfiguration);
        else
            self.layoutModel = new self.layoutDTO(self.pageConfiguration);
    };
}

$ संकलन:

bcd0d4 कारण, नियंत्रक इंस्टेंस पर पूर्व- bcd0d4 बाइंडिंग डिफ़ॉल्ट रूप से अक्षम है। अभी भी इसे वापस चालू करना संभव है, जो प्रवास के दौरान मदद करनी चाहिए। प्री-असाइनिंग बाइंडिंग को हटा दिया गया है और भविष्य के संस्करण में हटा दिया जाएगा, इसलिए हम आपके अनुप्रयोगों को जल्द से जल्द इस पर भरोसा न करने के लिए माइग्रेट करने की जोरदार सलाह देते हैं।

प्रारंभिक तर्क जो कि मौजूद होने वाले बाइंडिंग पर निर्भर करता है, को नियंत्रक के $onInit() विधि में रखा जाना चाहिए, जिसे बाइंडिंग असाइन किए जाने के बाद हमेशा कॉल करने की गारंटी दी जाती है।

- AngularJS डेवलपर गाइड - v1.5 से v1.6 तक पलायन - $ संकलन

अद्यतन करें

$compileProvider.preAssignBindingsEnabled फ्लैग को AngularJS $compileProvider.preAssignBindingsEnabled से हटा दिया गया है।

AngularJS टीम दृढ़ता से आपके आवेदनों को जल्द से जल्द उस पर भरोसा न करने की सलाह देती है। AngularJS V1.6 1July2018 पर जीवन का अंत करता है।

डॉक्स से:

38f8c9 कारण, निर्देशक बाइंडिंग अब कंस्ट्रक्टर में उपलब्ध नहीं हैं।

पहले, $compileProvider.preAssignBindingsEnabled फ्लैग का समर्थन किया गया था। ध्वज ने नियंत्रित किया कि क्या बाइंडिंग नियंत्रक निर्माता के अंदर या केवल $onInit हुक में उपलब्ध थी। अब बाइंडिंग कंस्ट्रक्टर में उपलब्ध नहीं हैं।

अपना कोड माइग्रेट करने के लिए:

  • यदि आपने $compileProvider.preAssignBindingsEnabled(true) निर्दिष्ट किया है, तो आपको पहले अपने कोड को माइग्रेट करने की आवश्यकता है ताकि ध्वज को false फ़्लिप किया जा सके। ऐसा करने के निर्देश "1.5 से 1.6 के बीच माइग्रेट" गाइड में उपलब्ध हैं । बाद में, $compileProvider.preAssignBindingsEnabled(true) कथन को हटा दें।

- AngularJS डेवलपर गाइड - V1.7 की ओर पलायन - संकलन

ध्यान दें:

1July2018 पर, AngularJS 1.6 के लिए समर्थन समाप्त होता है। अधिक जानकारी के लिए, AngularJS MISC - संस्करण सहायता स्थिति देखें






angularjs-1.6