2017-10-12 15 views
2

나는 Cefsharp 크롬 브라우저와 Nancy으로 호스팅되는 간단한 웹 응용 프로그램을 wpf 응용 프로그램에 내장 된 로컬 포트에 가지고 있습니다. 내 웹 응용 프로그램에서 각도를 사용하고 싶지만 각도 범위 내에서 변수를 변경하는 데 어려움을 겪고 있습니다.nancy 호스팅 웹 응용 프로그램에 cefsharp 브라우저를 연결하는 데 문제가 있습니다.

각도 페이지에서 직접 모든 것이 완벽하게 작동합니다. 그러나 C#과 JS 사이의 갭을 넘을 때 부분적으로 실패합니다. C#에서 전화를 끊으면 경고 창이 여전히 나타나고 report_type의 값이 경고 상자에서 변경된 것처럼 보입니다. 그러나 ng-switch에는 아무 것도 업데이트되지 않습니다. 그것은 마치 내가 C#에서 호출을 해고 할 때 정확한 범위에 접근하지 못하는 것입니다. 그렇다면 각도 범위의 메소드를 C#에서 호출 할 수 없습니다.

C#으로,이를 호출 서비스하는 웹 페이지에서

private void GIS_Button_Click(object sender, RoutedEventArgs e) 
{ 
    this.report_browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("ext_switch_gis();"); 
} 

을 :

var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 

 
    $scope.switch_gis = function switch_gis() { 
 
    alert("begin switch gis"); 
 
    $scope.report_type = "gis"; 
 
    alert("end switch gis"); 
 
    alert("report value is: " + $scope.report_type); 
 
    } 
 

 
    $scope.switch_bar = function switch_bar() { 
 
    alert("begin switch bar"); 
 
    $scope.report_type = "bar"; 
 
    alert("end switch bar"); 
 
    alert("report value is: " + $scope.report_type); 
 
    } 
 

 
    $scope.mytest = function mytest(words) { 
 
    alert(words); 
 
    } 
 

 
    $scope.switch_bar(); 
 
}); 
 

 
function ext_switch_gis() { 
 
    var outside_scope = angular.element(document.getElementById('myAppDiv')).scope(); 
 
    outside_scope.mytest("Beginning of external js call!"); 
 
    outside_scope.switch_gis(); 
 
    outside_scope.mytest("End of external js call!"); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script> 
 
<div id="myAppDiv" ng-app="myApp" ng-controller="myCtrl"> 
 
    <div id="report_switch_div" ng-switch="report_type"> 
 
    <div ng-switch-when="bar"> 
 
     <h1>bar</h1> 
 
    </div> 
 
    <div ng-switch-when="gis"> 
 
     <h1>gis</h1> 
 
    </div> 
 
    <div ng-switch-default> 
 
     <h1>Select a report type</h1> 
 
    </div> 
 
    </div> 
 

 
    <button ng-click="switch_gis()">gis test</button> 
 
    <button ng-click="switch_bar()">bar test</button> 
 
</div>

답변

0

해결책을 발견. JS 함수를 외부에서 호출 할 때, 종종 양방향 바인딩을 허용하는 "마법"뒤에 있는지 확인하려면 $apply을 사용해야 할 수도 있습니다.

$scope.switch_gis = function switch_gis() { 
    $scope.$apply(function() { 
     $scope.report_type = "gis"; 
    }); 
} 
: 내가 만든 http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

실제 코드 변경이이었다 :

이 문서는 나에게 매우 도움이되었다