繁体   English   中英

将JavaScript变量传递给angularJS范围

[英]Passing a javascript variable into a angularJS scope

因此,我使用MEAN堆栈创建了一个网页,并使用sessionStorage的HTML5 / Javascript变量保存了要在每个页面上携带的用户变量。

现在,我们正在尝试将此值通过控制器传递给angularJS。 问题是,但是,如果用户没有输入值,我们不知道如何将其传递到提交文件中。 我们尝试将用户名显示为只读,并使用getElementByID设置值,但是angularJS无法识别新值,而是从旧字段(即“”)获取值,因为文本字段的值开头,因此在angularJS范围内未定义用户。

我们还尝试将值作为隐藏范围传递,这也不起作用,因为角度

有没有一种方法可以在ng-model中声明变量? 问题是任何ng值都使用“”,因此始终认为该值只是“ user”只是文本“ user”,而不是变量。

任何帮助,将不胜感激

如果您已将用户名保存到sessionStorage中,如下所示:

window.sessionStorage.setItem("username","toby");

然后,在angular控制器中,您可以:

$scope.username = window.sessionStorage.getItem("username"); (编辑:这不会将username绑定到会话存储)

注意:如果要将JSON存储在会话/本地存储中,则应事先使其为JSON:

window.sessionStorage.setItem("userObject", JSON.stringify(userObject));

并检索:

var userObject = JSON.parse(window.sessionStorage.getItem("userObject"));

如果要观看会话存储,可以使用$watch

$scope.$watch(
    function(){return window.sessionStorage.getItem("username");},
    function(newVal, oldVal){
        console.log("Username changed from", oldVal, "to", newVal);
    }
);

您可能需要使用angularJS $ apply()函数才能使angular响应更新后的值。 在$ apply()上查看这篇有用的文章。 当您对Angular不了解的模型进行更改时,您需要调用$ apply()(例如,在$ http调用之外,Angular将自动对其进行$ apply()调用)。 您应该将函数包装在$ apply()调用中,即

$scope.$apply(function(var) {
    etc.
}

另外,要在控制器中将值放入模型中(假设您使用的是MVC框架),则需要在控制器内部声明一个模型变量。 例如,您可能有一个开始的控制器:

.controller("exampleCtrl", function($scope) {
    $scope.model = model;
}

然后,您可以通过调用以下命令在模型中创建/更新值

$scope.model.VALUENAME = whatever value

希望这会有所帮助!

这为我工作:

// in the javascript only section call an angular method to update the data when OnClick, OnChange, etc....

angular.element(document.getElementById('YourElementId')).scope().update_your_value(); 

//inside the angular controller

$scope.update_your_value =  function(){
    $scope.your_model.value        = $('#YourElementId').val(); //  or document.getElementById('YourElementId')).value
    $scope.$apply();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM