2017-03-05 7 views
0

각도 j를 사용하여 SPA를 만들려고합니다. 여기 내 JSP 페이지의 코드입니다 : $scope.selected에 대한 적절한 정보를 알아

<body class = "image1" ng-app = "myApp" ng-controller = "TasksController"> 

<div class="ng-view"></div> 

</body> 
<script type = "text/javascript"> 

var mmyApp = angular.module('myApp',['angularUtils.directives.dirPagination','ngRoute']).controller('TasksController', TasksController); 
function TasksController($scope, $http, $location) { 


    $scope.searchString = null; 
    $scope.shopping = {}; 

    var url = "/Online_Shopping/dispatcher/shopping/123"; 
    $http.get(url).then(function (response) { 

     $scope.shoppings = response.data; 


    }, function (error) { 
     throw error; 
    }); 
     $scope.selected = ""; 
     $scope.test = "hello"; 
    $scope.setSelected = function(shopping) { 
       $scope.selected = shopping; 
       console.log($scope.selected); 

      $location.path("/item"); 
     }; 

    $scope.shoppingChanged = function() 
    { 
     var url = "/Online_Shopping/dispatcher/shopping/" + $scope.shopping; 

     $http.get(url).then(function (response) { 

      $scope.shoppings = response.data; 

     }, function (error) { 
      throw error; 
     }); 

    }; 
} 

    mmyApp.config(function($routeProvider) { 
     $routeProvider 

      .when('/', { 
       templateUrl : '/Online_Shopping/shoppingtable.jsp', 
       controller : 'TasksController' 
      }) 


      .when('/item', { 
       templateUrl : '/Online_Shopping/item.jsp', 
       controller : 'TasksController' 
      }) 


    }); 
</script> 

콘솔 인쇄,하지만 내가보기 템플릿에서 액세스하려고 할 때, 아무것도까지 보여줍니다. 내가 코멘트가 말한대로 내 코드에 scope.selected $ 초기화,하지만 난 :

<h1>$scope.test is equal to {{test}}</h1> 
<h2>$scope.selected is equal to {{selected}}</h2> 

편집 : 그것은 {{test}}에 대한 아니라 {{selected}} 작동 - 여기

내보기 템플릿, item.jsp입니다 뷰 템플릿에서 $ scope.selected에서 여전히 값을 얻지 못했습니다. 내가 $ location을 사용하여/항목으로 리다이렉트 할 때 컨트롤러 기능이 리콜 된 것처럼 보입니다. 보기를 전환 할 때 컨트롤러를 리콜하지 못하게 할 방법이 있습니까? 먼저 응용 프로그램을 실행할 때

+0

'$ scope.selected '는 메소드 내에 있지 않다는 의미입니다. 메서드 앞에'$ scope.selected = ""'를 넣으십시오. 그리고 그것이 효과가 있는지보십시오. – Smit

+0

어떤 이벤트로든 '$ scope.setSelected'를 호출하고 쇼핑 데이터를 올바르게 전달하고, 함수에서 정적 값을 전달하려고합니다. –

+0

바이올린을 게시 할 수 있습니까? –

답변

0

, 당신은

<H2> $ scope.selected을 받아야하는 것은 </H2 >

하지만 당신이 이벤트를 호출 또는 함수와 동일 예를 들어 ng-click을 사용하는 버튼과 같은 방법을 사용하거나 초기 메서드 또는 시간 초과 및 다른 많은 것들이있는 콜백과 같이 setSelected을 호출하면

이 표시됩니다.

<input type="button" ng-click="setSelected('xyz')"/> 

또는

---controller begin--- 
... 
    $scope.test = "hello"; 
    $scope.setSelected = function(shopping) { 
       $scope.selected = shopping; 
       console.log($scope.selected); 
      $location.path("/item"); 
     }; 
... 
    function initialize(){ 
     $scope.setSelected("xyz"); 
    } 
    initialize(); 
---controller end--- 
: 샘플 6,

<H2> $ scope.selected 여기

쇼핑 변수 > </H2 > <의 값과 동일하다

반환합니다

<H2> $ scope.selected은/H2 >

this, 개체 자체를 가리킨하지 함수 본문을 참고하고, < xyz에 동일 shopping에 전화하면 (this.shopping)이 함수의 매개 변수로 설정 한 shopping 개체와 다릅니다. 컨트롤러에서 쇼핑을 스스로 정의하지 않은 경우 undefined 값을 얻게되고 shopping 매개 변수를 사용하지 않은 채로 남겨 두었습니다.

+0

변경 사항을 반영하기 위해 내 게시물을 업데이트했지만 $ scope.selected에 대해서는 아무것도 얻지 못했습니다. 콘솔은 $ scope.selected 값을 제대로 반환하지만/항목보기로 이동하면 scope.selected가 지워지거나 컨트롤러가 다시 호출되는 것처럼 보입니까? –

+0

@ PaymonWang-Lotfi ng-controller가 포함 된 요소를 제거한 다음 다시 작성하면 컨트롤러가 다시 시작될 수 있습니다. 그렇지 않으면 컨트롤러가 재시작 될 수 있습니다. (또는 페이지를 전환 할 때까지 라우터를 사용하는 경우 ng-view) ... – deadManN

+0

@ PaymonWang-Lotfi 먼저 정확히 무엇을했는지 모르겠지만 내 관점에서 레이아웃을 만들고, 상위 컨트롤러 인 경우 공유 데이터를 제어하려면 식별하지 않은 하위 라우트 기반 컨트롤러가 있어야합니다. 그들은이 컨트롤러의 데이터에 영향을 미칠 수도 있고 없을 수도 있습니다 ... 둘째 : 응용 프로그램이 다음과 같이 실행됩니다 : searchString을 null로 설정하고 객체로 쇼핑하고, ur를 설정하고, get 작업을 호출하고, 선택된 문자열을 빈 문자열로 설정하고, test를 hello로 설정 한 다음 setSelected를 사용자 정의 함수로 설정하고 shoppingChanged를 다른 함수로 설정하십시오. (다음 게시물 – deadManN

0

바인딩이 제대로 작동하려면 변수를 선언하거나 범위 변수를 초기화해야 올바르게 작동합니다.

selected은 초기화되지 않았지만 test은 테스트가 작동하지만 그 이유는 selected이 아닙니다.그것을 작동 시키려면 $scope.selected=''을 붙이십시오.

+0

내 게시물의 코드를 업데이트하여 변경 사항을 반영했지만 $ scope.selected에는 아무 것도 표시되지 않습니다. –

관련 문제