2016-10-23 5 views
0

각도 컨트롤러의 값과 속성을 가져오고 싶지만 undefined입니다. 모든 것이 MVC.net 응용 프로그램 안에 있으면 도움이된다면.각도의 HTML 태그의 속성을 가져올 수 없습니다.

단순화 번호 :

TestCtrl.js :

angular.module('CMM') 
    .controller('TestCtrl', ['$scope', '$element', '$attrs', function ($scope, elem, $attrs) { 
     $scope.name = "mohsen"; 
     $scope.api = $attrs.api; 
     alert($attrs.api); 
     alert(elem.data('api')); 
     console.log('hi, I am here'); 
    }]); 

app.js :

var app = angular.module('CMM', ['ngRoute','slServices', 'slControllers', 'ngAnimate', 'smart-table', 'ui.bootstrap']); 
..... 

사용 :

+0

컨트롤러는 * "구성 요소"의 일부였다 경우 요소가 노출 될 수있는 유일한 방법입니다 * 또는 ""지시문 *. 정상적인 컨트롤러에서는 무엇이 dom에 있는지 염려해서는 안됩니다. ngModel 문서 읽기 – charlietfl

+0

달성하려는 작업에 대해 조금 설명해 주시겠습니까? 컨트롤러는 DOM과 상호 작용하는 데 사용되어서는 안됩니다. 그것이 지시어로하는 일입니다. 지시어는 컨트롤러를 노출 및/또는 사용할 수 있으므로 수행해야 할 작업 일 수 있지만 더 자세하게 설명 할 수 있으면 조언하기가 쉽습니다. –

+0

@charlietfl 지시어 템플릿의 API 주소를 컨트롤러에 전달하고 싶습니다. 그래서 여기서 간단히 테스트 할 것입니다. – mok

답변

1

$element$attrs은 주사 할 수 없으므로 코드가 작동하지 않습니다. 주석에서 설명한대로 지시문을 사용하여 속성에 액세스하고 지시문에서 제어기를 참조 할 수 있습니다. 이것은 실제로 적절한 방법이 아니지만 작동하도록 만들 수 있습니다.

따라서이 같은 지침에서 API 값을 제공하는 데 사용되는 방법을 노출 될 수 컨트롤러 :

.controller("TestCtrl", function ($scope) { 
    this.SetApi = function (api) { 
    $scope.api = api; 
    }; 
}) 

그리고 값을 제공 할 수있는 방법을 컨트롤러를 참조하고 호출 할 수 있습니다 귀하의 지시어 이 같은 :

.directive("getApi", function() { 
    return { 
    controller: "TestCtrl", 
    link: function (scope, element, attr, controller) { 
     controller.SetApi(attr.api); 
    } 
    }; 
}); 
다음

동작하는 예제입니다 : https://jsfiddle.net/n5t6pfcc/

+0

감사합니다. 더 효과적이며 더 중요합니다. 이제 메커니즘이 더 잘 알려져 있습니다. 그건 그렇고, 당신이 링크를 제공하거나 그 서비스가 주사 할 수없는 이유를 간략하게 설명하면 좋을 것입니다. – mok

관련 문제